C_Dos. Sistema Operativo de discos de Convoy Programs (1993). Por Alexander Konstantinovich Filippov. ver. 3.6 A manera de introducción El sistema operativo de discos C_DOS está diseñado para funcionar con la familia de microcomputadoras domésticas "ZX SPECTRUM", lo cual incluye al ZX SPECTRUM +, TIMEX TC-2048, ZX SPECTRUM 128+, y ZX SPECTRUM +2. También puede usarse con clones y similares, cuya capacidad de conexión está determinada por el grado de compatibilidad con las antes mencionadas. El controlador tiene su propio búfer de RAM y no utiliza la memoria de la computadora para las variables del sistema. Esto evita cambios en el área de trabajo y hace que C_DOS sea independiente de los programas externos y, por lo tanto, sea compatible con casi cualquier software pensado para las computadoras de la serie SPECTRUM. A partir de la ver.3.0 del sistema operativo, la interfaz soporta discos ROM y RTC (real time clock = reloj en tiempo real), como dispositivos externos y adicionales. Sintaxis: comando *"{ruta} nombre" {acción} Los comandos son los siguientes: Format*, Cat*, Load*, Save*, Merge*, Verify*. Move*, Erase*, Let*, Attr*, Dim*, Goto* La ruta puede ser tanto un drive, nombre de diskette o de subdirectorio. El tamaño de directorios / subdirectorios es de 127 nombres. El número de archivos adjuntos del subdirectorio es ilimitado. Se admiten hasta cuatro drives: A, B, C y D con formato a 720 K. Un disco RAM (unidad E), útil como "unidad rápida" opcional (si la computadora tiene 128 K); Disco ROM (unidad F), e interfaz CENTRONICS. La capacidad del disco RAM (modelos con 128 K de memoria) es de 72 Kb. El soporte para disco ROM es de 32 a 800 Kb. La posibilidad de guardar dinámicamente es de 3 modos. El nombre es de hasta 11 caracteres sin la extensión. Diferencia las minúsculas de las mayusculas en el nombre. La extensión consta del punto más una letra. Las extensiones son: - para matriz de números             - para programas BÁSIC             - para código máquina             - para matriz de caracteres             - para archivo de volcado la excepción es la extensión solo para subdirectorios. Los atributos de los archivos son: I - ocultar (el archivo no aparece en el directorio) P - protegido. U - desprotegido. V - anula atributo de ocultar. Se admiten + y ? como wildcards (comodines) específicados. La acción al final del comando es una letra: S(top) - detiene la unidad inmediatamente después de ejecutar el comando. C(onfirm) - realiza la verificación de escritura. N(ot) - no hace solicitud alguna. H(igh) - solamente para formateo de alto nivel. Format* sintaxis 1: FORMAT *"{drive} nombre del volumen"{'S/'H} Formatea y da el nombre al disco en el drive especificado. Lo mismo con un disco RAM. Ejemplo: FORMAT *"A: disk1" 'H El sistema pregunta entonces: Formatear el disco en la unidad A: (Y / N) Si se pulsa Y saldrá el mensaje: Formateando ... No es necesaria la opción H si se va a volver a formatear el mismo disco. Nota: solo los disquetes de doble cara y doble densidad (DS/DD), 96 pistas por pulgada (96 tpi) son adecuados para usar en el sistema. Cat* sintaxis: CAT *"{ruta;}{nombre}"{'S} Ejemplos: CAT * - sin parámetros, muestra contenido de la unidad por defecto CAT *"B: datos" Admite wildcards o comodines: CAT *"ex+" - mostrará nombres de fichero que empiecen con "ex" CAT *"??sata" - dará los nombres de 6 caracteres que terminen en "sata" Save* Sintaxis: SAVE *"{RUTA;} nombre" {especificación} {'S/'N/'C} La especificación es la misma del comando de casete: LINE, CODE, DATA, SCREEN$ con sus respectivos parámetros. Cuando el nombre ya existe el C_Dos pregunta si se desea sobre escribir ó no, el archivo. La opción 'N sobregraba sin preguntar al respecto. Ejemplos: SAVE *"opera" LINE 1, SAVE *"$image" CÓDE 16384, 6912 Load* sintaxis: LOAD * "{ruta;} nombre" {especificación} {'S} LOAD * "" - sin parámetros cargará archivo de auto-arranque si lo hubiera Merge* sintaxis: MERGE * "{ruta;} nombre" {'S} Tanto LOAD como MERGE operan igual que sus equivalentes para casete. Verify* sintaxis: VERIFY * "{ruta;} nombre" {especificación} {'S} Nota: Puede verificar cualquier archivo en un disco, RAM o ROM, menos los archivos del tipo . Move* Sintaxis: MOVE * "{ruta}nombre fuente" TO "{ruta}nombre destino" Permite copiar un archivo de un disco ruta1 a otro ruta2. O de un sub directorio a otro. Admite wildcards. Ejemplos: MOVE *"+" TO ":" - copia todo de disco a disco con una sola unidad MOVE *"C: nombre" TO "" - copia archivo en C: a la unidad por defecto Nota: si un archivo con el mismo nombre existe en el disquete de destino, no se realizará la copia. Erase* sintaxis: ERASE *"{ruta;} nombre" {'S/'N} Erase siempre consulta si se desea eliminar o no el archivo. La opción 'N elimina sin consultar. Ejemplos: ERASE *"$bacalao" 'N - borrará el archivo de pantalla sin preguntar ERASE *"subdir" - borrará subdirectorio "subdir" de existir Admite wildcards. Let* (Rename) Comando para renombrar los archivos, no renombra discos ni subdirectorios. sintaxis: LET *"nombre viejo" TO "nombre nuevo" {'S} Ejemplo: LET *"code" TO "codigo" Attr* Permite cambiar los atributos del archivo. sintaxis: ATTR *"ruta;/nombre" atributo {'S} Admite wildcards. Ejemplo: ATTR *"+" U - desprotege todos los archivos del disco en curso Dim* (DIrectory Maker) Sintaxis: DIM *"{ruta;} nombre" {'S} Permite crear un subdirectorio al igual que el comando MKDIR del DOS. Ejemplos: DIM *"subdir" - Crea subdirectorio "subdir" DIM *"demo; dir1" - Crea un subdirectorio "dir1" dentro del directorio "demo" Goto* sintaxis 1: GO TO *"ruta" {'S} Es el equivalente al CD (Change Dir) del DOS. Ejemplos: GO TO *":" - va al directorio raiz. GO TO *": games;" Sintaxis 2: GO TO *"drive" Ejemplo: GO TO *"B:" - Cambia del drive por defecto al seleccionado, en este caso el "B". Subdirectorios El sistema te permite acceder a cualquier subdirectorio o unidad sin salir del actual. Suponga que en su disquete hay un subdirectorio "subdir", y se crea un subdirectorio "zcat", entonces la ruta a este subdirectorio se verá así: "subdir; zcat;". El símbolo ";" aquí sirve como separador para nombres de subdirectorios. Cualquier nombre que termine con este carácter se considera el nombre de un subdirectorio. Para cargar un programa llamado "archivo" de este subdirectorio, entonces el comando sería:                  LOAD * "subdir; zcat; archivo" Si necesita ir a un subdirectorio distinto, y no desea salir del actual, modifique el comando para que la ruta comience desde el directorio raíz:                  LOAD * ": subdir; zcat; archivo" Opción de auto arranque Si un archivo es nombrado "AUTOSTART", se convertirá en un archivo con inicio, es decir se cargará automáticamente desde el disco ROM (si lo hay) después de que el sistema se inicialice, o desde la unidad "A" si se presiona la tecla SYMBOL SHIFT. No recomendamos cambiar el nombre de un archivo ya existente para hacerlo AUTOSTART, ya que esto puede llevar a confusión. El botón "DUMP" Presionando el botón "DUMP" mientras trabaja con cualquier programa hará una pausa y el sistema esperará sus instrucciones. Sin embargo, no aparecerán efectos ni mensajes en la pantalla. Solo necesita presionar las teclas: 1, 2 o 3. El sistema genera un archivo de tipo en este caso, el cual Contiene el estado de toda la memoria de la computadora, registros del procesador, punto de recuperación, y máscara de recuperación para la operación actual del programa. Al pulsar DUMP, el sistema espera que uno elija: 1 - configura la máscara en modo procesador "1"; el borde es negro 2 - configurar la máscara en modo procesador "2"; el borde es negro 3 - guardar el área de la pantalla, no genera el archivo . Después de eso, la unidad actual se encenderá, se generará el archivo deseado y la computadora continuará ejecutando el programa interrumpido (¡sin ningún cambio!). En el directorio verá un nuevo archivo: "CDF!". Si es la pantalla, el archivo se llamará: "$CDF!", No es diferente de un archivo de pantalla normal. Recomendamos usar el modo 1 al reiniciar, si resulta que el modo 2 es necesario, usa el comando:                  LET *"CDF!" TO "#2" Mirando a través del directorio, se puede ver que la máscara de recuperación ha cambiado. Ahora el procesador comenzará en el modo 2. Tal cambio es posible solo para archivos con el nombre "CDF!". Si ya lo ha cambiado de nombre, la máscara no cambiará: solo se producirá otro cambio de nombre. Con este comando, puede cambiar el color del borde en el momento de la restauración:                  LET *"CDF!" TO "#2,1" El número después de la coma en el rango de 1 a 7 determinará el color del borde de acuerdo con la codificación estándar. Ahora el color del borde en el momento de la restauración será azul. Si ya tiene configuradas todas las opciones de arranque, cambie el nombre del archivo. Utilidades El sistema venía con un disco de utilidades varias: G.Shell - similar al Norton Commander para MS-DOS. Disk Editor - un editor de discos. CheckFree - para ver sectores dañados en el disco. BetaCopy & ToBeta - para leer discos TR-dos. DiskCopy - para copiar discos enteros. Mirror - restaura la información del sistema de un disco. Program Manager - una especie de MS Windows 3.xx muy simple para Spectrum. Estos programas también podían venir en formato de disco ROM. Los errores Es posible atrapar los errores mediante dos variables del sistema que son 23729 y 23728. Para desabilitar la captura de errores usar Poke 23729,0. El código del error se obtiene mediante PEEK 23728. Mensajes de error: 1. Drive not ready - la unidad no esta lista 2. Hardware drive fault - falla en el hardware de la unidad 3. Hardware write protection - proteccion contra escritura por hardware 4. Bad disk - el disco esta mal 5. Non-system disk - no hay sistema operativo en el disco 6. Name already exist - el nombre ya existe 7. Disk full - disco lleno 8. Directory full - directorio lleno 9. Illegal drive name - nombre de unidad no válido A. Illegal disk name - nombre de disco no válido B. Illegal filename - nombre de archivo no válido C. File not found - archivo no encontrado D. Software write protection - protegido contra escritura por software E. Wrong type - tipo erroneo F. Illegal code specification - especificación de código no válido 10. Cannot load program - no se puede cargar el programa 11. Cannot load array - no se puede cargar la matriz 12. Insufficient memory - memoria insuficiente 13. Incompatible disk - el disco es incompatible 14. Illegal pathname - nombre de subdirectorio no válido 15. Illegal catname - nombre de catalogo no válido 16. Catalog not found - no se encontró el catalogo 17. Catalog is not empty - el catálogo no está vacio 18. Verification Bad - falla en la verificación 19. Illegal FAT execution - ejecución no válida en el FAT. 1A. Device is not present - el dispositivo no está presente 1B. Write check Bad - falló la verificación de escritura 1C. Device is read only - el dispositivo es de solo lectura 1D. Array not found - matriz no encontrada Para cerrar: Este sistema creado en los 90, en la ex URSS, tiene un set de comandos muy similar (incluida la sintaxis) al del sistema FDD de Timex. Al igual que el FDD puede manejar 4 discos, subdirectorios y errores (pues usa las mismas variables de sistema que el Timex). También usa sus mismos atributos de fichero. La diferencia estriba en que le han quitado todas las sentencias para manejo de ficheros del tipo OPEN/CLOSE, y reemplazado el conector serial por uno paralelo (pero el manual original en ruso no dice nada sobre su uso). En cambio le añadieron un botón para capturar SNAPSHOTS (al estilo del +D y Beta128 o Didaktik 80) y disco ROM. Otros cambios son: quitaron Gosub* y Draw*, pero incluyeron Verify*; la extensión "DIR" fue remplazada por "CAT" y se eliminó la extensión "SCP" al no haber conexión serial. Visto todo lo anterior, parece que el C_Dos no es 100 % compatible con el Timex FDD, pero muchas rutinas en BASIC pensadas para el FDD operarán en el C_dos aunque con ligeros cambios en algunos comandos. Francisco León. 2019 zx_if1@hotmail.com