Didaktik Kompakt y D80 con Mdos El MDOS Sistema operativo de discos usado por las unidades D40 y D80 de la empresa Didaktik Skalika en la ex Republica de Checoslovakia, para su serie de clones del ZX Spectrum: Didaktik, siendo el Kompakt, el último de la serie. Los primeros Didaktik llamados Alfa (1 y 2) y Beta eran clones del PMD-85, pensados para su uso en las escuelas. En cambio para el hogar hicieron la línea Gama, de la cual hubo tres variantes: 87, 88 y 89. Su sucesor fue el Didaktik M y con el se harían los sistemas de disco D40 y D80 en 1990. El Kompakt salió en 1992, con unidad de disco incorporada al mismo estilo del +3. El Kompakt era en realidad sólo un Didaktik M 48k con D80. Mdos Versión 1.0 Sintaxis: comando "drive: nombre .extensión" Los comandos son los siguientes: Format, Cat, List*, Load*, Save*, Merge*, Move, Erase, Let Fn, Let Attr, Poke#, Read*, Restore*, Open#, Close#, Print*, Run, Lprint*, Llist*. Los drives admitidos son solamente a: y b: El nombre es de hasta 10 caracteres aparte de la extensión. Se diferencian las mayúsculas de las minúsculas. La extensión consta del punto más una sola letra. Las extensiones son entonces: P - para programas en basic. N - para datos numéricos. C - para datos de caracteres. B - para codigo máquina (bytes) Q - para ficheros secuenciales. S - para snapshots. Los atributos de los archivos son: H - ocultar (el archivo no aparece en el directorio) S - sistema. P - protegido. (*) A - archivo. (*) R - solo lectura. W - solo escritura. E - ejecutable. D - borrable. Se admiten * y ? como wildcards o comodines específicados. (*) Según el manual original estos no estaban implementados en la versión 1.0. Format sintaxis: Format "drive: nombre del volumen" Ejemplo: Format "a:disk1" De usarse una sola letra como nombre de volumen, ésta no debe ser ninguna de las siguientes: A,a - drive a: B,b - drive b: S,s - screen K,k - keyboard P,p - printer R,r - ram Cat sintaxis: Cat [""] Cat "drive:" Cat "volumen:" Cat "[drive/volumen:]nombre archivo[.ext]" Cat- es igual que Cat pero no muestra toda la informacion como Cat. Ejemplos: Cat "a:", Cat "disk2:datos", Cat- "b:" List* muestra el status de la unidad de disco y del sistema en general. Ejemplo: List* Save* Sintaxis: Save* "{drive:}nombre" Line/Code/Data/Screen$ Save* "[volumen:]nombre[.ext]" Cuando el nombre ya existe el Mdos pregunta si se quiere sobre escribir o no el archivo. Load* sintaxis: Load* "{drive:}nombre" Code/Data/Screen$ Merge* sintaxis: Merge* "[drive:/volumen:]nombre[.ext]" Move Sintaxis 1: Move "drive" Selecciona el drive a usar por defecto. Ejemplo: Move "b:" - Cambia al drive B. Move "volumen:" - hace lo mismo que el anterior pero usando el nombre del disco. Sintaxis 2: Move "volumen1:nombre1.ext","volumen2:[nombre2.ext]" Permite copiar un archivo de un disco volumen1 a otro volumen2. Ejemplo: Move "disk1:amigo.P","disk2:" Move "dsk1:prb.P","dsk1:prgbk.P" - copia archivo en el mismo disco. Si se omite la extensión, Move puede dar mensaje de error. Erase sintaxis: Erase "[drive:]nombre.ext" Erase "[volumen:]nombre" Ejemplos: Erase "a:prg.P", Erase "Alfa.*" Admite wildcards. Let Fn (Rename) Comando para renombrar los archivos. sintaxis: Let Fn("nombre viejo")="nombre nuevo" Ejemplo: Let Fn("code.B")="Codigo.B" Let Attr Permite cambiar los atributos del archivo. sintaxis: Let Attr("nombre")="lista de atributos" Let Attr("[drive:/volumen:]nombre[.ext]="[HSPA]RWED" Ejemplo: Let Attr("copia.P")="RWED" Admite wildcards. Poke# Como POKE, pero usa la RAM sombra de 2k de la Unidad de disco. Sintaxis: Poke# dirección,dato Ejemplo: Poke#97,50 Read* Lee sectores de 512 bytes del disco y los salva en una direccion especificada. Sintaxis: Read* "drive/volumen:[nombre]",sector,dirección. Ejemplo: Read* "a:",1,32768 Read* "datel.P", varnum1, varnum2 Restore* Lee 512 bytes de una dirección y lo salva en el disco a un sector especificado Sintaxis: Restore* "drive/volumen:[nombre]",sector,dirección. Ejemplo: Restore* "b:datas.B",10,41000 Restore* "a:",10,32768 Restore* "Disk1:",sektor, 40000 Open# Sintaxis1: Open# canal,"dispositivo" En este caso dispositivo solo puede ser una letra: K,S o P Sintaxis2: Open# canal,["{drive:}fichalect.ext"],["{drive:}fichaescri.ext"] Open# canal,[volumen/drive:fichalect],[volumen:fichaescri] Permite almacenar datos numéricos y cadenas. Da "" como EOF. Ejemplos: Open# 4,"file1.Q" abre para solo lectura. Permite el uso de Input# n;([Line]a$/var.) y Inkey$# n. Open# 4,,"a:alfa" Crea el archivo alfa.Q si no existiera y pasa a modo de escritura. (De existir el archivo todos los datos se perderían pues "resetearía" dicho file.) Permite el uso de Print# n;(a$/var.) Open# 4,"file1.Q","file2.Q" abre el file1 para leer y permite enviar los datos a file2. (De usarse el mismo nombre se "resetearía" el file de lectura. No parece haber modo Append) Para hacer un append habría que copiar al parecer el file2 como file1 con Move. El file1 debe existir previamente. La extensión Q permite crear ficheros secuenciales solamente. Si se omite ".Q" en el nombre, el Mdos lo usará por defecto. En cualquier otro caso dará error. Generalmente los canales 0 - 3 están reservados. Open#3,,"data.Q" hará que Llist y Lprint envien los datos a este fichero. Open#2,,"data.B" hará que Print y List envíen los datos a este fichero. En este caso la extensión no necesita ser Q. Close# Sintaxis: Close# [canal] Close# sólo sin especificar, cierra todos los canales abiertos. Print* Actúa igual que el comando Type del Dos o Cp/M solo con ficheros ".Q" ya sean estos o no creados con Open# - Close# Sintaxis: Print* "[drive:/volumen:]nombre.Q" Run Ejecuta buteo de archivo "run.P" si este existe en disco. Llist* Hace lo mismo que List* pero manda la información a la impresora. Lprint* Es igual que Print* pero usando la impresora. Nota: Estos dos últimos comandos no están mencionados en el manual original del Mdos versión 1.0 ROMs modificadas: Con las ROMs modificadas 80Lec y plus4, el comando CAT del D80/D40 simplemente da error, debido a que estas ROMs la usan para accesar a un monitor incorporado. La ROM imc48k modificada por Ian Collier admite CAT seguido de un 1 o 0. Ejemplos: Cat 1 y Cat 0 equivalen a Cat y Cat "" Cat 1"*.P" equivale a Cat "*.P" La opción Cat- no funciona en este caso. Con el 128k El D80 no es compatible con el Spectrum 128k, de intentarlo ambos se cuelgan. Mensajes de error: S File not found. No se halló el archivo en disco. T File exists. El archivo ya existe. U Disk full. Disco lleno V Directory full. Directorio lleno. Solo se admite un máximo de 128 archivos por drectorio. W Advanced feature. Características avanzadas. X Bad device type. Este mensaje se da cuando se inserta un disco que aun no está en formato MDOS. Y Device ident missing. Dispositivo identico desaparecido. Z Device unavailable. Dispositivo no disponible. a Device I/O error. Error en la lectura escritura del dispositivo. b Bad volume name. Nombre del volumen del disco erroneo. c Bad file type. Tipo de archivo erroneo. d Volume not found. No se encontró el disco con el nombre de volumen solicitado. e File is read protected. Archivo protegido contra lectura f File is write protected. El archivo está protegido contra escritura. g File is not executable. El archivo no es ejecutable. No tiene la extensión ".E" h File is delete protected. El archivo está protegido contra borrado. i Bad record number. Número de registro erroneo. Se da con Poke# j Impossible to RENAME. No es posible renombrar. k Impossible to COPY. No es posible copiar. l Corrupted FAT structure. Estructura FAT del disco se ha corrompido. m Stream already open. Canal ya abierto con Open# n Drive is not ready. La unidad aun no está lista. o Seek error. Error en la búsqueda. p Sector not found. Sector no hallado en el disco. q CRC error. Error en controlador de sectores. r Disk is write protected. El disco está protegido contra escritura. Cuando se da este error, el MDOS pregunta si se quiere reintentar: RETRY = R. Basta cualquier otra tecla para abandonar. s Internal error. Error interno cuando algo no se ha podido identificar. x File too long. El archivo es demasiado extenso. Falla lacarga con Load* Otros mensajes del MDOS: Please insert volume ... Por favor, inserte disco volumen ... (aquí aparece el nombre del volumen solicitado) Se da cuando se cambia el disco del drive o se solicitó un nuevo nombre de volumen erroneo. Erase all files ? (Proceed = P) Borrar todos los archivos? (Proceder = p) Este mensaje aparece con el comando Erase "*.*" pidiendo su confirmación. Rewrite old file(s) ? (Proceed = P) Reescribir sobre el/los viejo(s) archivo(s) ? (Proceder = P) All data will be discarded ! (Proceed = P) Todos los datos serán descartados ! (Proceder = P) Mensaje dado para confirmar si que quiere reFORMATear un disco. Drive is not ready (Retry = R) La unidad de disco aun no está lista. (Reintentar = R) Snapshots El D80 y en este caso el Kompakt, posee un botón especial para generar snapshots, con lo cual es posible pasar al disco un programa completo, Basta pulsar dicho botón para que se cree un fichero de nombre "SNAPSHOT00.S" el cual se debe ejecutar con LOAD dando el nombre completo más su extensión ".S". El sigte. snapsh. tendrá el mismo nombre pero se incrementará su número: "SNAPSHOT01.S" y así sucesivamente hasta donde permita la capacidad del disco. Se la puede renombrar con LET FN pero reteniendo siempre su extensión ".S". Son todos volcados de memoria de 48k. En emulación Los únicos emuladores que aceptan este sistema son: Real Spectrum, que admite al Didaktik Kompakt con el Mdos incluido, pero sin el botón de snaps. X128W ofrece una emulación bastante aceptable solo del D80 con Mdos, pero tampoco emula el botón. FUSE es el único que tiene el D80 con botón incluido. (c)2004 - 2019. Francisco León. zx_if1@hotmail.com