SISTEMA OPERATIVO DE DISCO MB-02+ Traducido de la documentación original de 8Bitcompany 1994-1997 El MB-02+ es un interface completo conteniendo: *BS-ROM: ROM clasico de zx Spectrum que contiene el BASIC y un software (interface) para la comunicación con el BS-DOS. *BS-DOS: sistema operativo que permite la comunicación con discos asignados por la BS-ROM o directamente a traves de un programa. *BS-BIOS: sistema central que dirige la comunicación entre software y hardware del sistema. BS-DOS 308 Cada disco permite 256 directorios (cada directorio puede tener un nombre de hasta 26 caracteres). Cada directorio puede contener hasta 65279 files, lo cual significa que cada disco puede almacenar 256*65279=16711424 files. Q+W anulan cualquier trabajo del disco. Nuevos comandos BASIC. Lista de Comandos: Usr, @, $, £, .Format, .Erase, .Unerase, .Rename, .Move, Press, .Kill, .Search, Cat, Copy, Save, Load, Merge, Verify, New, Fn Sintaxis: *Cualquier parámetro dentro de <...>, es opcional. *Cualquier especificación "data" implica lo siguiente: item <,item> <,item> <,item>... Donde "item" quiere decir: número1 > o TO Aquí número1 significa inicio de un rango (si número1 es omitido, se toman todos los archivos desde el comienzo del directorio) Y número2 significa el final del rango (si número2 es omitido, se consideran todos los archivos hasta el final del directorio) Ejemplo: (si el directorio tiene solo 32 archivos) TO 3,10,20,13 TO 15,28 TO significa que se han elegido todos estos archivos: 1,2,3,10,20,13,14,15,28,29,30,31,32 *La epecificación permite un "path" temporal dentro de un comando. Dicha especificación empieza con "#" seguida de un número que señala el "path" temporal. Se ha de cerrar con "," si hay más datos a poner despues. Ejemplo: (Si el disco por defecto fuera el número 4) CAT #2,66 Permitirá ver el catalogo del directorio número 66 existente en el disco número 2. Comandos que seleccionan el dispositivo (path) por defecto. USR 15522 - selecciona la grabadora como dispositivo en uso (LOAD, SAVE, VERIFY, MERGE funcionarán con el casete) USR 15524 - selecciona la disketera como dispositivo a usar (LOAD, SAVE, VERIFY, MERGE funcionarán solo con la unidad de disco) @ Selecciona la unidad de disco a usar por su número. Si número=0 Load/Save funcionaran con el casete como con USR 15522. Si número>O, entonces Load/Save interactauran con el disco como con USR 15524. @ Selecciona por el nombre del disco (opción no implementada segun nota del manual original) $ Selecciona directorio por su número. $ Busca directorio por su nombre. Admite solo 10 caracteres. £ Selecciona el archivo vigente. El puntero de Load es fijado a la posición requerida. Se pueden usar como comandos directos, o como sentencias dentro de programas o como el de una instrucción específica como CAT. Se pueden usar individualmente o combinadas. Ejemplo: @3$5@8$22$"fart""stinks" Significa que en el disco del drive 3 será usado como directorio en curso el 5 y que en el disco del drive 8 el directorio 22 será usado por defecto, despues fijará el primer directorio "fart" que esté luego del directorio 22 y el puntero de Load irá al file "stink". La secuencia ha de cerrarse con (';" siempre que lo requiera la sintaxis del comando. Número y cadena también pueden ser variables: Ejemplo: Let a=4: Let z$="alma": @a$z$ Irá al directorio alma del drive 4 Comandos del disco .FORMAT Elimina todos los archivos y directorios del disco. Es posible desformatear el disco usando .UNERASE (Solo en caso de no haber hecho ningún SAVE luego de FORMAT). Ejemplo: .format formatea el disco en el drive por defecto .format @2 fotmateará el disco en el drive 2 .ERASE data Borra archivos. Ejemplo: .erase 4 elimina el cuarto archivo del directorio .erase 0 - borra todo el directorio vigente. .erase x TO y - borra desde el file #x hasta el file #y .erase 10 TO - elimina todos los archivos a partir del file #10 .erase @2,3 - elimina file 3 del directorio vigente en drive 2 .erase @4$3, TO 5 - elimina hasta el file #5 en el directorio 3, drive 4 .UNERASE data Recupera archivos/directorios borrados por .ERASE. Ejemplo: .unerase 0 recupera directorio en curso. Los archivos dentro del directorio deben ser recuperados manualmente. Ya que aunque los archivos son recuperados en el CAT, los sectores que ocupan en el disco no. De allí que cada archivo deba ser a su vez .UNERASE para su real recuperación. .Rename: Sintaxis 1: .RENAME número,cadena Renombra el archivo "número" con el nuevo nombre "cadena". Si número=0, entonces renombra el directorio vigente (en este caso se pueden usar hasta 26 caracteres) Ejemplo: .rename 5,"alfa" .rename 0,"historia" .rename @2,1,"datos" Sintaxis 2: .RENAME número1,número2 Cambia la dirección de inicio (número2) de un file especifico (número1) Si número1=O entonces número2 debe especificar a que directorio pertenece esto (dentro de una estructura de árbol) .Move: Sintaxis 1: .MOVE número1,número2 Traslada el file "número1" del directorio en curso al directorio "número2". Si número1=0 entonces todo el directorio en curso será movido. Ejemplo: .move 5,3 mueve archivo 5 al directorio 3. Sintaxis 2: .MOVE número;data Traslada el archivo especificado por "data" al directorio "número". Nota: si se mueve un file dentro de su propio directorio en curso, el file será puesto al final de la lista. Ejemplo: .move 5;3 mueve el archivo 3 al directorio 5. Como su nombre lo indica este comando "mueve" no "copia" .PRESS Compacta el directorio seleccionado. (Necesario tras el uso continuo de .Erase o .Unerase) .KILL Borra la memoria CACHE interna. No es necesario ya que el DOS maneja todas las operaciones dentro del CACHE automaticamente. .SEARCH Busca una "cadena" requerida en el disco. Los nombre de todos los directorios y archivos existenetes son escaneados en la busqueda. El DOS escanea incluso los archivos borrados y directorios vaciados. La busqueda se inicia desde el directorio por defecto hasta llegar al directorio 255 y de allí a 0 hasta regresar al directorio con que empezó. Nota: Todos los comandos que empiezan por el "." deben teclearse letra a letra, ya sea en minúsculas o mayúsculas. .Format, .Erase y .Move no deben confundirse con Move, Erase y Format de una sola pulsación. CAT <.> Muestra el catálogo del directorio por defecto o uno seleccionado por . muestra incluso los archivos borrados y directorios vacios. <.> muestra el catalogo a partir del puntero de Load. CAT muestra la siguiente información: BS-DOS Versión-Nr. **BUSY SOFT disk: 1 "Nombre del disco" dirs: 1 "Nombre del directorio" Memoria libre en sectores por bytes y el número de archivos existente Número Contador Tipo Nombre Inicio Longitug COPY <.> Igual que el comando CAT. La version número del BS-DOS depende del DOS que haya sido instalado. Un Sector en un disco formateado en HD es de 1 kByte. Número de files no es algo exacto. En el caso del ejemplo solo daría todos los 32 archivos. Número es el número a elegir con Load o New para evitar tipear el nombre completo del file. Contador es el contador de posición para emulación del sistema de casete. > significa que el contador viene despues de ese o esos archivos. < significa que el archivo va despues del contador * señala precisamente el archivo en el que recae el contador. El contador es igual a la posición a la cual hay que rebobinar una cinta de casete. Tipo es solo un número, equivale al dato de la cabecera del archivo en cinta. 0 es un programa Basic 2 son datos de matrices 3 es un archivo en codigo máquina. 4 indica que son archivos no normales sin cabecera que se pueden copiar facilmente al disco usando un sistema clásic de copiado de cintas. IMPORTANTE: Algunos comandos no fueron incluidos en el DOS sino en el disco del sistema. Pequeñas utilidades para FORMATTING, COPYING, SETTING TIME... se cargan mediante el comando NEW "name". Comandos para el manejo de datos: SAVE <*> SAVE <*> nombre SCREEN$/ DATA var()/ CODE inicio, long. LOAD <*> LOAD <*> SCREEN$/ DATA var()/ CODE > MERGE <*> VERIFY <*> VERIFY <*> SCREEN$/ DATA var()/ CODE > Notas: número indica la posición del puntero (igual que el parametro "" del path). Todos los comandos obran en el directorio por defecto a menos que se especifique un path diferente. SAVE siempre salvará los datos al final de la lista del catálogo. "!" y "*" son ignorados; fueron implementados pensando en BASIC 128 (LOAD !) o en el Mdos D40/D8O (LOAD *) VERIFY trabaja tal como uno espera en el casete. Da un mensaje si la verificación muestra diferencias. NEW parametro Carga y ejecuta un programa especificado por el parametro. Si parametro es numerico, caraga y corre el ejecutable seleccionado en el directorio en curso. Si parametro es una "cadena", buscará y cargará el archivo llamado "cadena" Si no se halla nada, el sistema continuará la busqueda hasta el directorio 0. Si hasta lo último no halla nada, recién entonces da mensaje de error. Tanto "Programas" como "Bytes" pueden ser considerados ejecutables por el sistema. Si se considera un programa BASIC, se cargará y ejecutará (dependiendo del Save-Line) igual que con LOAD. Si se toma un archivo CODE ("Bytes"), ocurrirá lo siguiente: Suponiendo que AAA sea la dirección de comienzo del programa: IF AAA>=#5D00 (=23808) THEN CLEAR AAA-1 LOAD parameter CODE AAA CONTINUE AAA (ver BS-ROM 118) Si ningún parametro es dado, NEW obrará de la manera usual. Nuevas funciones BASIC: FN ? Da el número de la versión de DOS. FN @ Da el número de la unidad de disco en uso. FN $ Da el número del directorio en curso. FN £ Da la posición del puntero de carga. FN # Da el número de archivos existentes en el directorio vigente. FN % Da el número de sectores vacios en el disco en uso. FN * Da una cadena de 32 caracteres de largo especificando un dato del puntero en curso. Ejemplo: FN * (7 TO 16) da el nombre del archivo en curso. FN * (6 TO 22) da el valor de la cabecera del archivo (igual que en un casete) Si el puntero no está bien positionado dentro de los archivos del directorio en curso devuelve la cadena vacia. Si el puntero >= #FF00 (=65280), la cadena de 32 caracteres de largo especifica el nombre del volumen del disco. FN © Función especial que devuelve una cadena que incluye la memory desde rango 0 hasta 65535. Comandos externos: Como todo sistema operativo de discos que se precie, el BS-Dos ofrece también esta posibilidad. cdd: copy disk to disk Este programa permite copiar datos de disco a disco. Para ejecutar este comando externo tipear New "cdd" solamente para que aparezca un texto de ayuda explicando su sintaxis o si los parametros no son los correctos. Para ver la especificación de los parametros, chequear los comandos MOVE/ERASE pero usando "'" en vez de "TO" Todos los comandos externos como "cdd" se hallan en el disco de arranque original del BS-Dos. BS-ROM 118 Rom corregida del Spectrum rom de 48k *Es posible interrumpir un autolistado usando la tecla "Q" Se activa el modo del NMI presionando el botón NMI or saltando a #66 (=102) Un borde parpadeando rápidamente indicata que el sistema está ya en el modo NMI. Si el puntero de stack (SP) está en el área de memoria #000l-#4000 (1-16384), será cambiado a #5800(=22528). Teclas de control en modo NMI: B - inicio "warm" del BASIC. Todas las variables son reseteadas excepto PROG, VARS y ELINE. N - exactamente igual que hacer CLEAR 24575: NEW R - resetea memoria en 48K E - resetea memoria en 128K I - resetea los chips AY/FDC/DMA S - salva la pantalla al dispositivo por defecto. T - USR 15522 (usa por defecto: casete) D - USR 15524 (usa por defecto: disco) Q - retorna al programa interrumpido; hace solo un retorno correcto solo si el registro SP no es cambiado a #5800(=22528), todos los registros son reseteados a sus valores exactos (excepto los bits 6-0 del registro R) N - ejecuta el "debugger" MRS (debe ser cargado en la memoria) Los registros son fijados como con "Q" 0.. 9 switchea las páginas ZX 128K RAM; si SP estuviese situado en el área #COOl-#0000(=49153-0), esta será cambiada a #5800 (=22528); exactamente igual que con OUT(32765),número - usando 8 o 9 es posible ver los contenidos del VIDEORAM 2 U - función definida por el usuario que ejecuta la instrucción situada en #3901 (=14593) Z - función definida por el usuario que ejecuta la instrucción situada en #3904 (=14596) La sintaxis de comandos existentes ha sido extendida. Todo parametro entre <...> es opcional. CONTINUE Si expresión no es 0, ejecuta el código máquina en dirección (expresión). Al volver al BASIC, IY debe ser fijado a #5C3A (=23610) pero HL' no necesita ser fijado a #2758 (=10072). CLS Si expresión no es 0, Todos los colores serán fijados de acuerdo con la expresión. Ejemplo: CLS = BORDER 0:PAPER 0:INK 7:BRIGHT 0:FLASH 0:CLS GO TO, GO SUB, PAUSE, BORDER El parámetro numérico es opcional; sino se da se considera como 0 lista de datos Si la lista de datos no empieza con un número, los signos ";","," o "'", actuarán como si se usara PRINT. Poke: Sintaxis usual: POKE dirección,byte Sintaxis 2: POKE dirección;palabra POKE de 2 bytes (16 bits) Sintaxis 3: POKE direción, cadena POKEa toda una cadena dentro de la memoria VAL$ DEC -> HEX conversión. Si expresión = número, el resultado será una cadena de 4 caracteres en hexadecimal. Ejemplo: VAL$ 33023 = "80FF" % ó & HEX -> DEC conversión. Ejemplo: % 80FF = 33023 VAL Si expresión = número, el resultado será un número de 2-byte (16 bits) de la dirección (expression) Es igual a un PEEK de 2-byte. Nuevos comandos: , Edita lineas BASIC. Si expresión = 0 o no se da ninguno, editará la primera linea por defecto. ' Switchea las páginas de la RAM ZX 128K; exactamente igual que OUT (32765),expresión. Expresión debe estar en el rango de 0-15. Durante el suitcheado de páginas, la RAMTOP debe estar bajo #COOO (=49152). Ver 0.. 9 en el modo NMI. © Resetea todas las variables del sistema excepto PROG, VARS y ELINE (ver "B" del modo NMI) ^ Resetea memoria a 128K (ver "E" del modo NMI) ? Muestra la información respecto al largo del programa, la longitud de las variables y el espacio vacío en memoria disponible para su uso por el BASIC. * Lee las cabeceras de la cinta y muestra la información contenida: Tipo de archivo, nombre, dirección, largo [subrayado] Igual que USR 102 - executa el modo NMI. # Igual que USR 54885 - ejecuta MRS (¡debe estar cargado en la memoria!). MENSAJES DE ERROR DEL BS-DOS Los mensajes de error se muestran de la siguiente forma: Mensajes de Error: drv/dir/sub: file_name trk, sid, sec Enter=ok/reintentar, Space=abortar Donde: drv = error en número de drive dir = error en directorio número sub = error en archivo número trk = error en el número de track sid = error en el número de lado sec = error en el número del sector file_name = el nombre de archivo especifica área cercana al error. File not found No se encuentra el archivo solicitado File too short (archivo demasiado corto) Intento de carga de más sectores de los especificado para el archivo Can't unerase No puede ser borrado ya sea por sectores dañados o el directorio nunca existió. Error at N1-N2:N3 Un área diferente fue hallado al verificar: Nl-N2 son la diferencia de rango, N3 es la diferencia en longitud de área. File too long (archivo demasiado largo) Es imposible cargar o crear un archivo así de largo. Disk full (disco lleno) No hay más espacio disponible en el disco para salvar más datos. Disk not ready (disco no listo) No se detecta disco en drive o existe error de formato. Unknown disk (disco desconocido) No existe el número de drive especificado. Directory too long (directorio demasiado largo) Intento de acceder a más de 65279 archivos en un directorio. Directory full Intentar añadir nuevos archivos en un directorio lleno. Data integrity error N1 (error M1 en la integridad de los datos) Error al acceder a un disco. Can't read the disk BS-DOS no puede leer sector de buteo en el disco. Seek error (error en la busqueda) El chip FDC no puede hallar el track 0. Break Q+W han sido presionados simultaneamente duarante una operación de disco. Ready error Error al activar una unidad de disco. Write protect Se quiere escribir en el disco y el switch de protección contra escritura ha sido puesto CRC error Al cargar un sector de datos, el chequeo de adición CRC no encaja. Data lost Los Datos se han perdido al transferirse entre los chips FDC y DMA. Causado probablemente por un software que opera al DMA bajo interruciones. Time out Al operar un disco sin exito se superó el tiempo de acceso requerido. Record not found (registro no hallado) Al leer o escribir en un disco, no se halló el sector de identificación. (Causado por discos de baja calidad) Unknown format (formato desconocido) Intento de leer un disco que no tiene el formato propio del MB-02+. System error N1 Usualmente cuando se halla daño en el mismo BS-DOS. Es recomendable rebutear el sistema de inmediato. Mensajes de error del BS-ROM: Invalid I/O device (dispositivo de entrada/salida no valido) Se da cuando se elige la opción "Abort". Invalid file name (nombre de archivo no valido) Se ha dado un nombre de archivo/directorio inexistente. Invalid argument (argumento no valido) Se ha intentado ejecutar un archivo inejecutable con el comando NEW. Francisco León. Diciembre 2005 zx_if1@hotmail.com