El Sistema Operativo de los Microdrives de Timex ---------------------------------------------------------------------------------- Debido a que encontre el manual de los Microdrives de Timex en Archive.org, he querido compartir mi traduccion del texto original en ingles, aunque solo sea con fines de comparacion con los Microdrives de Sinclair. " Especificacion funcional Scott McCourt 10/10/83 Engeniero de Computo Timex Computer Corporation Middlebury, CT 1.0 - INTRODUCCION Este documento describe la funcionalidad del software del sistema que controla los sigtes. dispositivos del TS 2000: a) uno o mas microdrives b) una interfaz RS 232 c) un area de red local Los comandos en la Seccion 5.0 han sido implementados como un set de comandos en BASIC. Cuando el sistema operativo bootea primero, al usuario se pide la fecha en curso. El formato usado al tipear la fecha es mm-dd-yy. Una fecha no valida producira un mensaje de error y al usuario se le pedira que reingrese la fecha. Esta fecha no se actualiza, pero se la usa como info para el directorio (fecha de creacion, fecha de ultima actualizacion). Si no se tipea nada (cadena nula) la fecha es fijada a '00-00-00.' 2.0 - DOCUMENTOS RELACIONADOS [1] Especificacion funcional del software del sistema TS 2000 [2] Especificacion de la arquitectura del software del sistema TS 2000 3.0 - CONVENCIONES PARA NOMBRAR ARCHIVOS Un NOMBRE de ARCHIVO valido consiste de 10 caracteres empezando con un caracter alfanumerico. Los sigtes. caracteres son usados como COMODINES (wildcards). ? - representa un solo caracter * - representa un numero de caracteres (incluido el cero) Los comodines permiten que se efectuen operaciones con grupos de archivos (por ejm., CAT, ERASE, etc.). Si el primer caracter del nombre del archivo es un cod. ASCII 0 (cero), dicho nombre no aparecera en el directorio cuando CAT es ejecutado (see Seccion 5.3). 4.0 - TIPOS DE ARCHIVOS Los tipos de archivo que pueden aparecer en el disco (en este caso, cartucho de microcinta) son: 1) BASIC - para programas BASIC 2) BYTES - imagen de memoria (salvado con especificacion CODE o SCREEN$) 3) DATA - fichero de datos (cualquiera creado usando un comando OPEN#) 4) ARRAY - salvado con la especificacion DATA 5.0 - JUEGO DE COMANDOS DEL TS 2000 Convenciones: c = flujo de canal # (0-15) m = especificacion de disp. ("m" por microdrive) ("t" por texto) ("b" por binario) ("n" por red de trabajo) ("k" por teclado) ("s" por pantalla) ("p" por impresora) n = numero de la unidad (1-8) r = longitud del registro (1-32767) Nota: Ninguno de los comandos que veremos a continuacion distingue entre mayusculas y minusculas. 5.1 OPEN #c; "m"; n; "nome" [ ,"ftspec"] Abre un flujo c al microdrive n y crea un nuevo fichero, o abre un fichero ya existente especificado por "nome". Para la descripcion del "nome" ver sec.3.0. ftspec ("tipo de fichero especifico") = "I [r]" - entrada solamente, en todos los casos la opcion 'r' especifica la longitud del registro para ficheros de acceso directo. "R [r]" - entrada/salida a la vez "A [r]" - modo APPEND (a~adir) - automaticamente pone el puntero del fichero al final del mismo (queda implicito que esta especificacion es de entrada/salida) Si 'r' no es especificado, entonces el fichero es abierto solo para acceso secuencial. Por defecto la especificacion del tipo de fichero es "R". Si el dispositivo a usar es "k", "s" o "p", el delimitador que le sigue al num. del flujo debe ser una coma. N.d.T.: en el texto original falta mencionar: OPEN #c; "n"; numero de estacion - para comunicacion por red OPEN #c; "t" - abre para impresora serial modo texto OPEN #c; "b" - impresora serial modo binario sin filtrados Ninguna de estas opciones operara si antes no se las inicializa con FORMAT. No hay mencion acerca de LPRINT o LLIST, pero supongo que podian usarse en combinacion con OPEN "b" o "t". 5.2 CLOSE #c Cierra el fichero asociado a un flujo especifico tras vaciar los buffers apropiados necesarios. 5.3 CAT [#c;] n [;"nome"] Produce una lista de los archivos en el microdrive n y los muestra en orden alfabetico en la pantalla. Su segunda forma dirige la salida al flujo # c. La informacion que ofrece por cada archivo es: el nombre del archivo el tipo la fecha de su creacion la fecha de su ultima actualizacion su tama~o (en bytes) el numero de bytes libres en el cartucho El argumento opcional "nome" permite el listado de grupos de archivos (ver Seccion 3.0). 5.4 LIST #c Hace que el programa BASIC en memoria sea listado por el flujo # c. 5.5 FORMAT "m"; n; "volnome" FORMAT "n" ; num FORMAT "b" ; b-rate FORMAT "t" ; b-rate donde: "m" - Formatea el cartucho en el microdrive n y le da nombre de volumen especificado por "volnome". "n" - Asigna una estacion especificada por num para usar una red local "b" - inicializa un flujo al puerto RS 232 con un rango de baudios especificado por b-rate. "t" - mismos parametros que "b". El canal "t" (texto) es usado para transferir listados a un flujo. El protocolo de los varios caracteres ASCII es el sigte.: 0 - 12 - no enviados 13 - envia un retorno de carro y avance de linea 14 - 31 - no enviados 32 - 127 - enviados de modo normal 128 - 164 - no enviados (manda "?" en cambio) 165 - 255 - tokens expandidos usando cods. ASCII del 32 - 127. Tanto INPUT e INKEY$ experan caracteres de 7 bits del canal "t" (el bit 8 es ignorado.) El canal "b" (binario) envia codigos de 8 bits. Tanto INPUT como INKEY$ experan caracteres de 8 bit del canal "b". SAVE y LOAD operan solo con el canal "b". Los caracteres de avance de linea no se insertan automaticamente tras un returno de carro como si pasa con el canal "t". 5.6 SAVE * (Nota: el '*' lo distingue del SAVE de cinta) SAVE *"m"; n; "nome" Salva el programa en curso y sus variables al archivo "nome" especificado en la unidad n. SAVE *"m"; n; "nome" LINE Como el SAVE anterior pero cuando se cargue, empezara automaticamente al inicio del programa. SAVE *"m"; n; "nome" LINE num Igual que antes, pero cuando cargue, arrancara automaticamente a partir de la linea especificada por num. SAVE *"m"; n; "nome" DATA array() Salva la matriz numerica de datos array con el nombre "nome" en la unidad n. SAVE *"m"; n; "nome" DATA array$() Salva la matriz de cadena array$. SAVE *"m"; n; "nome" CODE st, ln Salva una serie de bytes empezando por la direccion 'st' con un largo 'ln' de bytes con el nombre especificado en la unidad n. SAVE *"m"; n; "nome" SCREEN$ Salva el contenido de la pantalla. Esta es equivalente a: SAVE *"m"; n; "nome" CODE 16384, 6912 SAVE *"n"; numero de estacion Noten que hacer un SAVE al canal "n", permite que un programa o datos sea transferido a otra estacion en la red local. La estacion receptora inicia la operacion de recepcion mediante el LOAD equivalente (ver Secc.5.7). Cuando esta operacion es usada ya no es necesario especificar un nombre, basta con dar el numero de la estacion emisora. 5.7 LOAD * (Nota: el '*' lo distingue del LOAD de cinta) LOAD *"m"; n; "nome" Carga el programa y sus variables del archivo "nome" especificado en la unidad n. Cualquier programa existente en memoria sera sobrescrito. LOAD *"m"; n; "nome" DATA array() Carga la matriz numerica array() con el nombre "nome" en la unidad n. LOAD *"m"; n; "nome" DATA array$() Carga una matriz de cadena array$(). LOAD *"m"; n; "nome" CODE [[st [,ln]] Carga una serie de bytes empezando por la direccion 'st' con un largo 'ln' de bytes con el nombre especificado en la unidad n. Si se omiten 'st' o 'ln', se usaran los parametros con los que fue salvado antes. LOAD *"m"; n; "nome" SCREEN$ Carga el contenido de una pantalla salvada con un nombre especifico en la unidad n. LOAD *"n"; num. de estacion LOAD usado con el canal "n" permite que programas o datos se transfieran desde una estacion a otra en la red de trabajo local. La estacion trasmisora inicia la operacion de envio usando un SAVE equivalente (ver Secc.5.6). Con esta operacion no es necesario un nombre, basta con dar el num. de estacion. 5.8 ERASE "m"; n; "name" Remueve el o los archivos especificados en la unidad especificada. Ndt.: acepta comodines para borrar en bloque. 5.9 MOVE "m"; n; "srcnome" TO "m"; n; "destnome" MOVE #c1 TO #c2 Causa que los datos en el flujo c1 o contenidos en el fichero identificado por "srcnome" para ser enviados al flujo c2 o copiados al fichero "destnome". Los ficheros de acceso directo o Random pueden ser movidos solamente usando la sintaxis especifica de "srcnome" a "destnome". NdT.: para aclarar solamente podria usarse #c1 y #c2 si estos son previamente abiertos mediante un OPEN, a menos que c2 refiera al canal S o P. 5.10 VERIFY * (Nota: el '*' lo distingue de su version de cinta) A continuacion veremos que VERIFY* tiene la misma sintaxis que LOAD*, excepto que no carga los datos en memoria sino que los compara con lo que ya existe. Un mensaje de error es dado si no fuesen identicos. VERIFY *"m"; "nome" VERIFY *"m"; n; "nome" DATA array() VERIFY *"m"; n; "nome" DATA array$() VERIFY *"m"; n; "nome" CODE [st [, ln]] VERIFY *"m"; n; "nome" SCREEN$ Notese que usar VERIFY con un canal "n" permite que programas o datos en memoria sean verificados (comparados) con lo transferido desde/a otra estacion dentro de una red local. La estacion trasmisora inicia la operacion de envio mediante SAVE (ver Secc. 5.6). En este caso no es requerido un nombre pero si un numero de estacion con la sintaxis sigte.: VERIFY *"n"; num 5.11 PRINT #c; [AT rec#, byte#;] varlist Hace que la lista de variables o constantes 'varlist' sea escrita al fichero que fue abierto usando el flujo #c. La opcion AT es usada solo con fiheros de acceso directo. Posiciona el puntero cursor del fichero a un num. de bytes especifico dentro de un registro dado. Notese que los elementos individuales dentro del flujo de impresion deben ser separados con delimitadores validos (comas o nueva linea) y esas cadenas deben ser escritas entre comillas si el contexto asi lo requiere (ver INPUT a cont.). 5.12 INPUT #c; [AT rec#, byte#;] varlist Causa que la lista de variables (varlist) sea leida de un fichero abierto por el flujo #c. Sobre la opcion AT ver PRINT (Secc. 5.11). Los elementos son leidos desde un fichero como si fuesen tipeados con el teclado (como es el caso de la sentencia INPUT) o de una sentencia DATA (usando READ). 5.13 MERGE *"m"; n; "nome" (Nota: el '*' lo distingue de su version de cinta) Carga el archivo especificado de la unidad n, causando que sea fusionado o se mezcle con el programa BASIC que ya esta en memoria. MERGE * "n"; num Noten que MERGE a un canal "n" permite que un programa sea transferido desde otra estacion en la red local. La estacion trasmisora inicia el envio con SAVE (ver Secc. 5.6). Esta operacion no requiere nombre de fichero, solamente un numero de estacion receptor. 5.14 LET var$ = INKEY$ #c Esto causa que el caracter a leer del fichero en curso, o por el puerto RS 232 o por la red de trabajo sea asignado a una variable de cadena var$. 6.0 CODIGOS DE ERROR SYNTAX ERROR - error de sintaxis generado por OPEN, SAVE, LOAD, VERIFY o MOVE STREAM NOT OPEN - flujo de canal no abierto CLOSE, PRINT#, INPUT#, INKEY$#, LIST, MOVE o CAT STREAM ALREADY OPEN - el flujo ya estaba abierto OPEN INVALID DEVICE SPECIFICATION - dispositivo especificado no valido OPEN, CAT, FORMAT, SAVE, LOAD, ERASE, MOVE, VERIFY o MERGE INVALID FILENAME - nombre de archivo no valido OPEN, SAVE, LOAD, ERASE, MOVE, VERIFY, MERGE o CAT INVALID DRIVE NUMBER - numero de unidad no valido FORMAT, CAT FILE OPENED FOR SEQUENTIAL ACCESS - fich. abierto para acceso secuencial PRINT#, INPUT# WRITE PROTECT ERROR - protegido conrtra escritura SAVE, ERASE, MOVE o PRINT# DEFECTIVE MEDIA - medio defectuoso todas las operaciones de disco FILE NOT FOUND - no se encuentra el archivo LOAD, ERASE, MOVE, MERGE FILE OPENED FOR READ ONLY - fich. abierto solo para lectura PRINT# CARTRIDGE FULL - cartucho lleno SAVE, PRINT# END OF FILE - fin de fichero INPUT# " Para cerrar Asi como el 2068 era un Spectrum con mas comandos y funciones, mas modos graficos y de texto ademas de chip de sonido; asi tambien los micro drives de Timex ofrecian mas comandos y funcionalidades que la version original de Sinclair. Los microdrives de Timex iban a salir al mercado bajo el nombre de T/S 2065 y su interfaz de expansion posiblemente se hubiera llamado SERIE 1. Hay una foto del equipo completo con casetera, dos microdrives y una impresora de matriz. Al principio se creyo que eran "mockups" (maquetas de dise~o que no funcionan pero estan de muestra), resulta que los prototipos no solo existian sino que realmente funcionaban pero nunca salieron al mercado. Por el manual vemos que a lo ya ofrecido por el ZX Interfaz 1, se le a~adio la posibilidad de usar comodines, CAT mejorado, SAVE LINE tuvo una nueva sintaxis, fecha y encima OPEN podia crear ficheros en modo Append y ficheros tipo Random! Lo que nos perdimos por causa del cierre de Timex/Sinclair USA! (c)2024 zx_if1@hotmail.com