Proceed 1 de Logitek Producida en 1984 Interfaz para conectar la unidad VC 1541 del C=64 al ZX Spectrum. La interfaz de disco de Logitek fue creada para conectar la disquetera Commodore 1541 al ZX Spectrum. Debido a que los periféricos de Commodore son en realidad computadoras independientes, la sintaxis de sus comandos tiene ciertos detalles, como el comando OPEN #, que además del identificador de la unidad, el número de línea interno que el sistema operativo de dicha unidad pide, hay otros valores a especificar para el comando OPEN en Commodore. Las unidades de disco conectadas se identifican por el número de dispositivo de 8 en adelante. Esto se debe a las convenciones de las computadoras Commodore: la numeración de sus dispositivos, donde el dispositivo 0 es el teclado, el 1 es una grabadora de cinta, el 2 es un puerto RS-232, el 3 es una pantalla, los dispositivos 4 y 5 son impresoras, 6 y 7 son trazadores y como ya se dijo, del 8 en adelante son unidades de disco. La interfaz de disco Proceed 1 proporciona tres formas de identificar al dispositivo con el que se comunicará: un número, el identificador "In" o "Mn". Cuando se hace referencia usando "Mn" y números separados, el número de unidad es menor que ocho, aumentado en siete, "M1" corresponde a "I8", "M2" corresponde a "I9". "M" y "M0" corresponden también a "I8". Si es necesario referirse a un dispositivo con un número menor que 8 (como por ejemplo, una impresora), es necesario usar la forma "In" con la cual ya no se realiza tal conversión. También incorpora un conector de impresora Centronics y botón de RESET. Sobre la 1541: La 1541 es una unidad de discos de 5.25", simple lado a 170k. Su número de sectores por pista varía de 17 a 21 y venía con sistema incorporado version CBM DOS 2.6. La unidad carece de switches DIP para cambiar o elegir el número de drive a usar. De conectarse más de una unidad, hay dos opciones, hacerle una modificación al hardware o usar una instrucción de software que durará hasta que se apague la unidad. Tiene un bufer de 2k de RAM y su directorio acepta hasta 144 archivos. No admite subdirectorios. En el manual del Proceed 1 no se menciona cuantas unidades pueden conectarse, pero un C=64 puede conectar hasta 5 unidades 1541, pudiendo ponerse todas una encima de la otra. Con la impresora siempre conectada a la última unidad libre. Los comandos del Logitek DOS v2.1 El Logitek Disc Interface ofrece los siguientes comandos (cuando es posible, las palabras clave del Basic Sinclair se usan como tales; y en otros casos los comandos se tipean letra a letra y comienzan con un signo menos): Cat, -Cmd, Copy, -Create, +/-Dev, -Dread, -Dwrite, Erase, -Flerr, Format. -Init, Load, -Lseek, Merge, Move, New, -Onerr, Open#, -Rename, Save, -Stdio, -Stty, -Valid, Verify, [ ... ], Close#, Inkey$#, Input#, Llist, Lprint, Print#. sintaxis: comando {canal} {nombre.tipo}{parámetros} admite 3 formas: la de casete, tipo Microdrive *"M" y tipo Commodore "I" Canal = un número entero del 0 al 15 0 : Canal de entrada estándar usado por LOAD 1 : como el anterior pero para SAVE 2 - 14 : de uso libre como canal de lectura y escritura por parte del usuario. 15: canal de comandos y manejo de errores. Los comandos se pasan mediante OPEN. El nombre de fichero es de hasta 16 caracteres de largo. La unidad 1541 y el C=64 aceptan cuatro tipos de archivo: PRG - programas SEQ - ficheros secuenciales USR - archivos usuario REL - ficheros relativos - ficheros de acceso directo (quinto tipo sin extensión designada) Logitek Dos para Spectrum usa las sigtes. extensiones como tipo: .BAS - programas Basic .DAT - ficheros DATA .COD - ficheros CODE .SCR - pantallas .EXE - programas en C.M. autoejecutables .COM - extensiones de los comandos .SYS - controladores de dispositivos Los cuatro primeros son considerados PRG de Commodore. Los tres últimos son USR. OPEN # crea los ficheros tipo SEQ, REL y directos. Algunos comandos admiten '*' y '?' comodines (wildcards). El signo '=' tiene un uso especial para manejar los tipos de archivo de Commodore. I - Comandos Sinclair Format sintaxis: FORMAT {unidad,} "nombre {,ID}" donde: unidad = si se omite se usará la unidad por defecto nombre = hasta 18 caracteres de largo id = identidad del disco de dos caracteres Ejemplo: FORMAT “Testdisk,84“ - formatea un disco nuevo con id = 84 FORMAT “Testdisk“ - reformatea el mismo disco reteniendo su "id" Cat sintaxis: CAT {#canal} {,unidad} {,info} donde: info = cadena con el nombre o tipo del fichero Ejemplos: CAT - muestra en pantalla el directorio de la unidad por defecto CAT #n - manda el directorio al canal abierto 'n' (n=2 por defecto) CAT 2 - muestra el directorio de la segunda unidad (9 de Commodore) CAT *"I9" - hace lo mismo que el ejemplo anterior CAT "B*" - muestra los archivos que empiecen con "B" CAT “*=REL“ - lista todos los ficheros relativos Erase sintaxis: ERASE {unidad,} archivo {, archivo2 {, archivo3, ...}} Admite comodines. Puede borrar uno o más de un archivo del disco. Move sintaxis: MOVE origen TO destino {BUF b} donde: origen y destino = 'canal' ó 'unidad, x, nombre de fichero' x = 1 para indicar copia de destino (0 opcional, original a copiar) b = tamaño del búfer (opcional, max. 256) Ejemplos: MOVE #n1 TO #n2 - mueve datos del canal n1 al canal n2 MOVE #n1 TO 8,1,b$ - copia datos de canal n1 al fichero b$ MOVE m1,y$ TO m2,1,b$ - copia fichero y$ a otra unidad con nombre b$ MOVE y$ TO "nombre,S,W" - copia archivo y$ como fichero secuencial New (líneas) sintaxis: NEW n1, n2 donde: n1 y n2 son el comienzo y final de líneas a eliminar de un listado New (reset) sintaxis: NEW * resetea el sistema de la interface, así no hay que apagarlo y volver a encender. save sintaxis: SAVE {unidad,} f$ {tipo} Ejemplos: SAVE f$ - genera archivo de tipo .BAS SAVE f$ DATA d () - fichero tipo .DAT SAVE f$ CODE adr, len - tipo .COD SAVE f$ SCREEN$ - pantalla .SCR SAVE f$ USR dir, inic, largo - .EXE SAVE n, f$ - salva f$ en la unidad n SAVE * "M2", f$ SAVE * "I8", f$ - guarda el archivo en la unidad 8 Load sintaxis: LOAD {{unidad,} f$ {tipo}} Ejemplos: LOAD - carga el último archivo salvado LOAD f$ - carga archivo desde la unidad 8 por defecto LOAD * "M", f$ - carga archivo desde la unidad 8 LOAD 9, f$ - carga el archivo desde la unidad 9 LOAD f$? - Carga de archivos, el tipo de archivo se determina automáticamente Merge sintaxis: LOAD {unidad,} f$ MERGE 2, y$ - lee y$ en la unidad 2 y lo añade al programa en curso Verify sintaxis: VERIFY {{unidad} f$ {tipo}} VERIFY - sin parámetros: verifica el último archivo guardado Copy (a impresora) sintaxis: COPY {(n1, n2, n3, n4)} {* h1, h2} {# w} donde: n1 = columna inicial (0-255) con 0 por defecto n2 = columna final (0-255) con 255 por defecto n3 = línea inicial (0-175) con 175 por defecto n4 = línea final (0-175) con 0 por defecto h1 = aumento horizontal (0-255) con 2 por defecto h2 = aumento vertical (0-175) con 1 por defecto w = un valor de 0-7, especifica modo a imprimir (0 por defecto) envía una copia de la pantalla a la impresora según los parámetros dados Ejemplos: COPY #0 - impresión normal COPY #1 - imagen al reves (reflejado en el eje x) COPY #2 - idem (reflejado en el eje y) COPY #3 - imagen invertida (reflejada en los ejes X,y) COPY #4 - imagen de costado (reflejada en la bisectriz) COPY #5 - imagen boca abajo y de costado ( en la x y en ángulo) COPY #6 - imagen invertida (reflejada en el eje y a la mitad) COPY #7 - invertida, de lado en los ejes x,y en angulo Copy (ficheros) sintaxis: COPY "archivo = archivo1, archivo2, ..., archivoN" copia y vincula desde el archivo1 hasta archivoN en archivo. Ejemplo: COPY “DATEI =X,Y,Z" II - Sentencias tipeables Cmd sintaxis: -CMD {g,} c$ donde: g = la unidad de disco c$ = una cadena de texto conteniendo un comando de disco CMD envía comandos del C=64 al disco por el canal 15, Así pueden manejarse los archivos directos para su lectura y escritura en bloques. Ejemplos: -CMD "VALID" - comando validar disco -CMD 9, "UI+" - cambia el modo de trasmisión del C=64 más lento Create sintaxis: -CREATE (f$, n1 {, n2}) donde: f$ = nombre de archivo a crear n1 = tamaño del registro: valor entero (0-254) n2 = número de registros: entero (0-1023) crea un archivo relativo con un número definido de registros y el máximo de caracteres Ejemplos: -CREATE (“DATEI“,20) - crea fichero relativo con 20 caracteres por registro -CREATE ("DATEI",20,100) - fichero de 100 registros y 20 caracteres maximo Dev sintaxis: +/- DEV d$ {o,i} donde: d$ = letra del dispositivo o = dirección de salida en memoria i = dir. de entrada añade o elimina dispositivos especificados en la lista de perifericos Ejemplos: +DEV "V“ 64000, 640Ö3 - añade disco RAM al sistema y redirige SAVE, LOAD, etc. -DEV "M" - elimina el controlador de dicho dispositivo Dread sintaxis: -DREAD (n, var$, len) donde: n = canal 0-15 var$ = variable de cadena a usar len = máximo número de bytes o caracteres para var$ lee bloques de datos de una cadena y aunque es usado principalmente con ficheros relativos, también puede leer ficheros secuenciales y programas, siempre que se abran mediante OPEN. Dwrite sintaxis: -DWRITE (n, c$, len) donde: n = canal 0-15 c$ = cadena de texto a guardar len = máximo número de bytes o caracteres para c$ escribe c$ en el fichero relativo por el canal n; tambien puede usarse para escribir en ficheros secuenciales. Ejemplos: -DWRITE (4, a$,100) - escribe 100 bytes de a$ en el fichero en canal 4 -DWRITE (4,"Hallo“,5) - escribe "Hallo“ en fichero en canal 4 Init sintaxis: -INIT {unidad} inicialización de la unidad. Este comando debe aplicarse al cambiar los discos. Si se detecta una ID de disco diferente de la última lectura o inicialización del disco en la unidad, la computadora dará el error 'DISC ID MISMATCH' al intentar guardar un programa. Lseek sintaxis: -LSEEK (n, rn, pr) donde: n = canal 0-15 rn = número de registro: valor entero 0-719 pr = posición en el registro en bytes 0-255 establece el puntero en un archivo relativo con un número definido de registros al canal n, hacia una posición específica en el registro seleccionado, para su lectura/escritura. Onerr sintaxis: -ONERR n donde n especifica el número de línea (de 0 a ¿3276?) a saltar al darse un error. PEEK 23298 almacena el número del error para su consulta. ONERR 0 desactiva la captura de errores en el programa Basic. Flerr sintaxis: -FLERR {unidad,} (var$) Lectura del canal de error (solo en modo -STTY FS-E). El mensaje de error se almacena en la variable de cadena var$. Ejemplo: -FLERR (a$) - captura el error en a$ para su uso con PRINT por ejemplo. Rename sintaxis: -RENAME {unidad,} "n1 = n2" donde: n1 = nombre nuevo a usar n2 = nombre antiguo del archivo a renombrar Ejemplo: -RENAME "fichero=datos1" Stdio (standard in/out) sintaxis: -STDIO d$, adr permite elegir el dispositivo de entrada/salida para las operaciones de archivos por defecto. Ejemplos: -STDIO = "C": la unidad de cinta es elegida como el dispositivo predeterminado -STDIO = "M", 9 - la unidad de disquete 9 es seleccionada como dispositivo predeterminado -STDIO = "M", 8 - hace lo mismo con la 8 Stty sintaxis: -STTY param1 param2 donde: param1 = P / FS P = configuración de parámetros del controlador de dispositivo FS = adaptación del controlador del dispositivo de bloque de disco param2 = tipo de impresora o sistema de disco -STTY P E - para Epson, Shinwa cp80, Star -STTY P I - Itoh -STTY P X - Shinwa CP88X -STTY P S - Seikosha -STTY P A - salida directa de caracteres sin recodificación -STTY P N - Recodificación del Código Sinclair a ASCII -STTY P G - Salida gráfica del juego de caracteres Sinclair -STTY P +L - modo negrita para palabras claves -STTY P -L - desactiva el modo -STTY P +& {Buf} - conecta la impresora paralela.          Buf = tamaño de búfer en Bytes. Si se omite, será de 32K -STTY P -& - desconecta la impresora -STTY P W=n - elige uno de 8 modos gráficos -STTY P H=n - establece la ampliación horizontal al valor n -STTY P IM=n - Máscara gráfica (invertida cada 1 bit) -STTY P AM=n - máscara AND (cada bit alto permite salida de punto) -STTY P CL=n - máx. de caracteres por línea, 72 por defecto, si n=0 entonces permite cualquier número de caracteres por línea. -STTY P LP=n - Establece las líneas por página. 0 por defecto si n=0 entonces permite cualquier número de líneas or página. -STTY P LF="..." - ingresa comandos de tabulación en el avance de línea -STTY P FF="..." - Define la cadena que se genera en un avance de página. -STTY P GC=“..." - cadena que inicia salida gráfica para captura de pantalla. -STTY P GP="..." - cadena que inicia salida de gráficos en modo -STTY P G. -STTY P BP="..." - cadena que inicia la impresión en negrita en modo + L. -STTY P NP="..." - cadena que desactiva la negrita en modo +L. -STTY FS +E - activa la lectura automática del canal de error -STTY FS -E - desactiva -STTY FS +N - activa extensión de nombre de archivo -STTY FS -N - desactiva Valid sintaxis: -VALID {unidad} Reorganización de un disquete, libera el espacio dejado por los archivos borrados Nota: En el modo -STTY FS-E, la computadora inicia sesión inmediatamente mientras la unidad de discos hace la validación. [ ... ] sintaxis: [: comandos:] Enciende y apaga el intérprete de comandos LOGITEK. Los comandos entre corchetes se ejecutan sin la intervención del interprete extendido [ - activa el intérprete de comandos LOGITEK ] - apaga el intérprete de comandos LOGITEK. Nota: una vez activo, ningún comando funciona excepto "]" Ejemplo: [: 0pen # 4, "K":] El comando OPEN ya no se ejecuta en el sistema LOGITEK, sino en la ROM de Sinclair. III - manejo de ficheros Open sintaxis: OPEN #n, {unidad,} {"nombre {,S,modo}"} donde modo: W - (write) archivo abierto para escritura R - (read) archivo abierto para leer A - (add) archivo abierto para agregar nuevos datos al final del archivo M - archivo de secuencia mal cerrado (abierto para lectura) S - (sequential) para el manejo de ficheros secuenciales solamente Ejemplos: OPEN #n, 8,2, "name, S, R": abre archivo secuencial del drive 8 canal n OPEN #n, "M",4, "archivo" - abre archivo en la unidad 8 y canal n OPEN #n, *"I8",3, "archivo" - OPEN #n, *"I4",4 - Commodore envía todo a la impresora por el canal n Close sintaxis: CLOSE #n Cierra los canales Sinclair K, S y R; elimina los búferes de memoria de los dispositivos extras de LOGITEK así como los dispositivos físicos IEC asociados mediante "M" e "I" abiertos con OPEN. Print# sintaxis: PRINT #n;chr$ Escribe chr$ en un dispositivo ya sea disco o impresora por el canal n Ejemplo: PRINT #4;"Hallo" Input# sintaxis: INPUT #n;var$ Lee los datos desde un dispositivo por el canal n mediante var$ Ejemplo: INPUT #4,a$ Inkey$ sintaxis: LET var$ =INKEY$ #n Lee carateres uno a uno desde un dispositivo por el canal n y lo pasa a var$ Lprint y LList sintaxis: la misma del Basic del Spectrum para impresoras El modo de listado especial (-STTY P + L) fue creado especialmente para listados BASIC. Cuando se activa, todas las palabras clave de Sinclair se imprimirán en negrita. Basta hacer BREAK para interrumpir LLIST. El comando LPRINT también está sujeto al control de formato de salida -STTY P. Ejemplos: LPRINT CHR$ 27;“@“ - reinicia la impresora Ficheros secuenciales Los archivos secuenciales se generan con OPEN # ... "..., S, W" y se generan inicialmente para escritura. No hay acceso directo a archivos secuenciales, se pueden abrir para escribir, añadir o leer. Se escribe en ellos con PRINT # y se leen con INPUT # e INKEY$ #. También admiten -DWRITE o -DREAD. Ficheros relativos Los archivos relativos se generan utilizando -CREATE, el número de registros es opcional, los archivos relativos tienen acceso aleatorio y un archivo relativo abierto se puede leer y escribir al mismo tiempo. El archivo se abre con OPEN #. Con -LSEEK se coloca en la posición deseada en el archivo relativo, -DWRITE (o PRINT#) se usa para escribir un registro y -DREAD (o INPUT# e INKEY$ #) para leer. Si se ha abierto un archivo relativo, solo se puede abrir un archivo secuencial diferente pero no relativo en el disquete ya que un archivo relativo ocupa casi toda la memoria de una unidad de discos. Ejemplo de fichero relativo: 10 -CREATE (“Namendatei“,200,100) 20 OPEN #4,1,3, “Namendatei" 30 -LSEEK (4, 50, 0) 40 -DWRITE (4, “NAME“, 200) 50 CLOSE #4 Nota: traducido y adaptado al español de la pagina original de la wikipedia en checo, así como del texto del manual en alemán del Proceed 1 por Logitek. (c)2019 zx_if1@hotmail.com