Commodore DOS, también conocido como CBM DOS, es el sistema operativo de disco utilizado con computadoras de 8 bits de Commodore. A diferencia de la mayoría de los otros DOS, que se cargan desde el disco en la propia RAM de la computadora y se ejecutan allí, CBM DOS se ejecuta internamente en la unidad: el DOS reside en la ROM dentro de la unidad, y es ejecutado allí por uno o más CPU de la familia MOS 6502.
Versiones CBM DOS
Se sabe que existen al menos siete versiones numeradas de Commodore DOS; la siguiente lista proporciona los números de versión y las unidades de disco relacionadas. A menos que se indique lo contrario, las unidades tienen un formato de 5¼ pulgadas. El código «lp» designa unidades de «perfil bajo» («low profile»). Las unidades cuyo número de modelo comienza con 15 se conectan a través de los protocolos exclusivos bus IEEE-488 (bus IEC) serie (TALK/LISTEN) de Commodore; todos los demás usan el paralelo IEEE-488.
1.0: se encuentra en las unidades de disquete 2040 y 3040 2.0: se encuentra en las unidades de disquete 4040 y 3040 2.5: se encuentra en las unidades de disquete 8050 2.6: se encuentra en las unidades de disquete 1540, 1541 incluido el integrado en el SX-64, 1551, 2031 (+ «lp») y 4031 2.7: se encuentra en las unidades de disquete 8050, 8250 (+ «lp») y SFD-1001 3.0: se encuentra en las unidades de disquete 1570, 1571 externa y 8280 (8280: 8 pulgadas), así como en los discos duros 9060 y 9090. 3.1: se encuentra en la unidad 1571 incorporada de las computadoras C128DCR 10.0: se encuentra en la unidad de disquete 1581 (3½ pulgadas)
La versión 2.6 fue, con mucho, la versión más utilizada y más conocida, debido a su uso en la 1541 como parte de los sistemas C64.
Nota: El firmware revisado para el 1571 que solucionó el error del archivo relativo también se identificó como V3.0. Por tanto, no es posible diferenciar las dos versiones utilizando solo el número de versión.
Descripción general
1541 tipos de archivos y directorios
El disquete Commdore 1541 puede contener hasta 144 archivos en un espacio de nombres plano (sin subdirectorios); el directorio se almacena en la pista reservada 18, que se encuentra a mitad de camino desde el centro hasta el borde de un disco de una cara de 35 pistas. Un nombre de archivo puede tener hasta 16 bytes de longitud y es teóricamente único; Al utilizar métodos de acceso directo en la estructura de directorios, es posible cambiar el nombre de un archivo al de otro, aunque el acceso a dicho archivo puede ser difícil o imposible. Los archivos con nombres idénticos generalmente no tienen ningún propósito, excepto informar o administrar visualmente los archivos. Un truco popular, utilizado, por ejemplo, por The Final Cartridge III, era agregar archivos llamados "----------------" de tipo DEL< en el directorio, y los archivos podían reorganizarse alrededor de esas líneas para formar grupos. Muchos desarrolladores de juegos, miembros del grupo warez y piratas informáticos de la demoscene también utilizaron algunas entradas de directorio personalizadas más ingeniosas.
Los nombres de archivo pueden contener un carácter de espacio desplazado ($A0), y si la lista del directorio se ve desde BASIC, la parte del nombre del archivo más allá del carácter $A0 parecerá haber sido separado de la primera parte del nombre del archivo por una comilla, haciendo que BASIC no lo considere parte del nombre completo del archivo. Esta función se puede utilizar para crear entradas de directorio como , que luego aparecerá en la lista del directorio como, por ejemplo, . Cuando el usuario mueve el cursor al principio de la línea, escribe la palabra LOAD sobre el tamaño del archivo y presiona , BASIC interpreta eso como , lo que hace que el programa se cargue en la memoria. Cualquier cosa después de los dos puntos o la dirección secundaria no se ejecutará, ya que la computadora ignora cualquier comando después de un LOAD. Alternativamente, el usuario puede presionar para y , es decir, cargar y correr el programa automáticamente.
Un byte nulo incrustado en un nombre de archivo interrumpirá el listado después de cargarlo por BASIC. Si hay tres bytes nulos, eso dificulta la lista mediante BASIC. Muchos programadores de lenguaje de máquina experimentarían con bytes nulos en un intento de hacer más difícil para los programadores de BASIC acceder a su código y manipularlo.
En BASIC, se puede acceder al directorio como un programa pseudo-BASIC no ejecutable con (o en el caso de una unidad dual) seguido de LIST. La primera línea tiene un número de línea de 0 o 1 (indicando el número de la unidad), mostrando en video inverso el nombre e ID del disco y un código abreviado para la versión de DOS con la que fue creado (los códigos varían solo en la medida en que las versiones de DOS utilizan formatos de disco incompatibles: «2A» es utilizado por la mayoría de las versiones de DOS de 5,25 pulgadas, «3D» por el 1581 de 3,5 pulgadas). Las líneas posteriores tienen el tamaño de un archivo (en bloques de disco) como su pseudo «número de línea», seguido del nombre del archivo entre comillas y el código de tipo de tres letras. La última línea muestra el número de bloques no asignados en el disco (nuevamente como un pseudo «número de línea»), seguido de las palabras «BLOCKS FREE».
En el Commodore 64, ingresar inundará la pantalla con basura en lugar de cargar el directorio en la BASIC RAM. Esto se debe a que la unidad asigna al directorio una dirección de carga de $0401 (1025), que es equivalente al inicio de BASIC para el Commodore PET, pero corresponde a la memoria de pantalla predeterminada en el C64 (comenzando con el segundo carácter en la primera línea de la pantalla).
Ver el directorio con un comando sobrescribe el programa BASIC en la memoria. El DOS Wedge y varios cartuchos y extensores de terceros como Epyx Fast Load, Action Replay y The Final Cartridge III permiten ver el directorio del disco mediante comandos especiales que cargan el directorio en la memoria de la pantalla sin destruir el programa BASIC actual. Algunas versiones de Commodore BASIC incluyen un comando DIRECTORIO o CATALOG que realiza la misma función.
Se admiten los siguientes tipos de archivos:
SEQ Un archivo secuencial es un archivo de datos que se puede leer linealmente de principio a fin. Los archivos SEQ se utilizan comúnmente para almacenar documentos o archivos de texto creados por un procesador de texto u otro editor similar. Un archivo secuencial es análogo a un archivo plano en Linux o UNIX, ya que no tiene una estructura interna especializada. No es posible colocar una ubicación arbitraria en un archivo secuencial, ya que no hay un análogo de la llamada al núcleo lseek encontrada en los sistemas operativos tipo UNIX. PRG Los archivos PRG normalmente contienen código de programa ejecutable, aunque también se pueden usar para archivos de datos. Los primeros dos bytes del PRG son leídos por la rutina kernal «load file» y se utilizan para determinar la dirección de carga (se almacenan en un formato little endian). REL Un archivo relativo es una variación del tipo de archivo secuencial, en el que está presente un mecanismo de indexación denominado sectores laterales para permitir el acceso orientado a registros. Los registros pueden tener un tamaño máximo de 254 bytes y se direccionan mediante un número cardinal basado en uno, lo que permite un verdadero acceso aleatorio a cualquier parte del archivo. USR Un archivo especificado por el usuario tiene una estructura interna idéntica a la de un archivo secuencial. El propósito original de Commodore para este tipo de archivo era facilitar el desarrollo de DOS, ya que el contenido del archivo se podía copiar en un búfer de la unidad para que lo ejecutara el microprocesador de la unidad. Muy pocos programas han hecho uso de este tipo de archivo. Algunas aplicaciones que utilizan estructuras de disco de bajo nivel no estándar guardan datos en formato USR, que llegó a ser considerado una especie de indicación de «déjame en paz, no intentes copiar o eliminar» para el usuario. En particular, los archivos «VLIR» del GEOS se muestran como archivos USR. DEL Un tipo de archivo indocumentado utilizado internamente similar en estructura a un archivo secuencial. La creación de este tipo de archivo debe realizarse mediante la manipulación directa del directorio del disco.
La presencia de un asterisco (*) antepuesto al tipo de archivo en una lista de directorio (por ejemplo, *SEQ) indica que el archivo no se cerró correctamente después de la escritura. Cuando se ordena a la unidad que cierre un archivo que se ha abierto para escritura, el búfer asociado se vacía en el disco y el mapa de disponibilidad de bloques (BAM) se actualiza para reflejar con precisión qué bloques se han utilizado. Si un programa falla u otro problema (como que el usuario quita el disco mientras un archivo está abierto) da como resultado un «archivo huérfano», también conocido como archivo «venenoso» o «splat», los búferes no se vacían y el BAM no reflejará con precisión el uso del disco, lo que pone al disco en riesgo de corrupción. Por lo general, no se puede acceder a un archivo envenenado (pero se puede abrir en modo «modificar»), y un intento de usar el comando DOS scratch para eliminar el archivo puede dañar el sistema de archivos, como la reticulación. El único método práctico para eliminar uno de estos archivos es abriendo el archivo en modo «modificar» (y reparándolo), o validando el disco (vea el comando de DOS validate a continuación), este último reconstruye la BAM y elimina las referencias a archivos venenosos del directorio. El infame save-with-replace bug podía resultar en la creación de archivos splat.
*DEL es un tipo especial escrito en la entrada del directorio de los archivos que se han eliminado. Dichos archivos no se muestran en una lista de directorios normal y sus bloques de datos y entradas de directorio serán reutilizados por archivos que se creen posteriormente. Algunos programas utilitarios permiten la «recuperación» de dichos archivos si sus bloques de datos y entradas de directorio aún no han sido sobrescritos por otros archivos. Los archivos DEL se utilizan comúnmente para insertar anuncios o secciones de comentarios en una listado de directorios.
Los tipos de archivo con < después de ellos (por ejemplo, PRG<) están «bloqueados» y no se pueden eliminar; sin embargo, se pueden abrir para leer. No existe un comando Commodore DOS que pueda establecer o borrar explícitamente este estado, pero se escribieron muchas utilidades de terceros para permitir que esto se haga. Estas utilidades generalmente leen el directorio usando comandos de acceso directo, realizan las modificaciones necesarias a los datos sin procesar y luego escriben los cambios en el disco.
Acceso a archivos
El acceso a los archivos es principalmente un problema para la computadora anfitrionna. La ROM kernal en la computadora contiene las rutinas primitivas necesarias para acceder a los archivos, y la BASIC ROM contiene una abstracción de nivel superior para el acceso a archivos utilizando la sintaxis BASIC. Los componentes que conciernen al propio DOS son el análisis del nombre de archivo y la dirección secundaria. Esta sección le dará una descripción general de los comandos BASIC necesarios en aras de la integridad.
La apertura de un archivo en una unidad de disco Commodore implica el procesamiento de una serie de parámetros que son vagamente análogos a los procedimientos de apertura de archivos en otros entornos. Dado que el DOS se está ejecutando en el controlador de la unidad, la secuencia de apertura del archivo debe pasar suficiente información a la unidad para asegurar una interpretación inequívoca. Una declaración típica en BASIC para escribir en un archivo secuencial sería la siguiente:
Los parámetros que siguen a la orden OPEN son los siguientes:
3