domingo, 13 de marzo de 2022

Commodore 64C: Disquetera 1541

La disquetera Commodore 1541 es un sistema de almacenamiento de datos creado en 1982 para el ordenador Commodore 64. Utiliza disquetes de 5,25", una cara y 170 KiB. Su principal ventaja frente a los datassetts es el acceso aleatorio a cualquier archivo del disquete de forma casi instantánea. El dispositivo tiene un procesador MOS 6502 para ejecutar las funciones de control de disco y el sistema operativo de disco Commodore DOS.



La disquetera es de gran tamaño y tiene integrada una fuente de alimentación que convierte los 220 V de la red eléctrica en los voltajes que utiliza internamente el aparato. Encima de la fuente hay una rejilla de ventilación para disipar el calor que genera. Por detrás del aparato está el conector de alimentación eléctrica IEC C14, un interruptor de encendido y dos conexiones serie. Algo más abajo se encuentra una pieza de plástico que al girarla permite extraer el fusible de protección al igual que en la fuente de alimentación del Commodore 64C.



Una de las conexiones serie sirve para conectar la disquetera al ordenador mediante un cable con un conector DIN-6 en cada extremo. La otra conexión se puede utilizar para conectar otro aparato al ordenador a través de la disquetera, lo que se conoce como "daisy chain".


Junto con la disquetera me venía un disquete con programas de pruebas y demostración. Los disquetes de 5,25" se componen de un disco flexible de material magnético dentro de una funda de plástico. Tienen en el centro un agujero por donde la disquetera sujeta el disco para hacerlo girar. En la parte de abajo se encuentra la abertura por la que la disquetera accede al disco para leer y escribir. Al lado del agujero central hay otro pequeño agujero por donde la disquetera detecta un agujero en el disco que marca el principio de las pistas en las que se divide. Los disquetes pueden tener arriba a la derecha una muesca que cuando está destapada permite la escritura en el disco.


Los disquetes se introducen en la disquetera por la ranura de la parte frontal con la abertura de lectura/escritura hacía dentro. Una vez introducido se gira la palanca de cierre de la disquetera impidiendo que se pueda sacar. Una parte del disquete queda accesible al exterior para poder agarrarlo y extraerlo cuando se ha terminado de usar.


Por la parte de abajo de la disquetera hay más rejillas de ventilación y cuatro tornillos que es necesario quitar para levantar la parte superior de la carcasa y acceder al interior del aparato.

Para realizar pruebas de escritura y lectura utilicé otro disquete sin información importante y con la muesca que permite la escritura. En la siguiente foto se ve el disquete junto a un disquete de 3,5" para que se pueda apreciar la diferencia de tamaño y forma.


Al encender la disquetera podemos ver como se ilumina una luz verde en el frontal. Debajo de la ranura del disquete hay otra luz de color rojo que se enciende cuando la disquetera está activa escribiendo o leyendo.

Para escribir archivos de datos y enviar comandos al sistema operativo que se ejecuta en la disquetera se utiliza el comando OPEN con los siguientes parámetros.

  • Número de referencia del archivo desde 1 a 255.
  • Código de dispositivo. El código de la disquetera es por defecto 8. En el manual de la disquetera se explica como cambiarlo para poder conectar varias disqueteras.
  • Canal de comunicación. Los canales 0 y 1 están reservados para los comandos LOAD y SAVE. El canal 15 se usa para enviar comandos a la disquetera. Los canales del 2 al 14 se pueden usar para leer o escribir archivos.
  • Comando o nombre de archivo.

Para poder utilizar un disquete primero es necesario darle formato con el comando NEW. Los disquetes se dividen en 35 pistas y cada pista en bloques de 256 bytes. Las pistas exteriores al ser más largas tienen más bloques que las interiores. En total hay 683 bloques y 170,75 KiB. La pista 18 está ocupada por el BAM (Block Availability Map) (Mapa de Disponibilidad de Bloques) y el directorio de archivos del disquete. Este directorio permite almacenar en el disquete 144 archivos y guarda el nombre y tipo del archivo así como los bloques usados por el archivo. La pista 18 tiene 19 bloques, por lo que quedan en el disquete 664 bloques disponibles para archivos.

Para ejecutar el comando NEW se debe abrir el canal de comunicación 15 y pasar como parámetros un nombre y un identificador como por ejemplo "DISCO1" y "01". Al terminar de ejecutar el comando se debe cerrar el canal con el comando CLOSE y el número de referencia del archivo.

OPEN 1,8,15,"NEW:DISCO1,01":CLOSE 1

READY.

A continuación podemos mostrar el nombre e identificador del disquete y listar su contenido. Con el comando LOAD se carga en memoria la información como si fuera un programa BASIC y con el comando LIST se muestra por pantalla. El comando LOAD y otros utilizan por defecto el número de dispositivo 1 que pertenece al datassette. Para utilizar la disquetera es necesario indicar su número de dispositivo, por defecto el 8. Como el disquete está recién formateado no tiene ningún archivo y los 664 bloques están libres.

LOAD "$",8

SEARCHING FOR $
LOADING
READY.

LIST

0 "DISCO1          " 01 2A
664 BLOCKS FREE.
READY.

Lo primero que podemos probar a grabar es un pequeño programa. Como la información del disquete está en memoria es necesario ejecutar el comando NEW para eliminar esa información de la memoria antes de escribir el programa. Para grabar el programa se utiliza el comando SAVE al igual que con el datassette pero no es necesario presionar ningún botón de la disquetera. El procedimiento es mucho más sencillo y automático, el sistema operativo de la disquetera se encarga de buscar bloques libres en el disquete donde grabar el programa y añadir una entrada en el directorio de archivos con la información del programa.

NEW

READY.


10 A=10
20 PRINT A


SAVE "PROGRAMA1",8

SAVING PROGRAMA1
READY.

Después de grabar el programa podemos comprobar que la grabación ha sido correcta utilizando el comando VERIFY. Este comando compara el programa en memoria con el programa grabado en el disquete. También podemos grabar un segundo programa para realizar pruebas con más de un archivo.

VERIFY "PROGRAMA1",8

SEARCHING FOR PROGRAMA1
VERIFYING
OK

READY.
SAVE "PROGRAMA2",8

SAVING PROGRAMA2
READY.

Si ahora volvemos a listar el contenido del disquete veremos como están los programas que hemos grabado y el número de bloques disponibles ha disminuido. En la primera columna se indica el número de bloques ocupados por el programa.

LOAD "$",8

SEARCHING FOR $
LOADING
READY.

LIST

0 "DISCO1          " 01 2A
1    "PROGRAMA1"        PRG
1    "PROGRAMA2"        PRG
662 BLOCKS FREE.
READY.

Para cargar uno de los programas grabados solo tendremos que usar el comando LOAD. A diferencia de los datassetts no es necesario que apretemos ningún botón en la disquetera. El proceso es automático como en la grabación, el sistema operativo de la disquetera busca en el directorio de archivos los bloques en los que está escrito el programa, lee su contenido y lo carga en memoria.

LOAD "PROGRAMA1",8

SEARCHING FOR PROGRAMA1
LOADING
READY.

LIST

10 A=10
20 PRINT A
READY.

Si necesitamos modificar el programa y guardar los cambios lo debemos volver a grabar escribiendo "@:" antes del nombre. El sistema operativo de disco se encarga de marcar el archivo original como eliminado y escribir un nuevo archivo con el mismo nombre y el nuevo contenido.

SAVE "@:PROGRAMA1",8

SAVING @:PROGRAMA1
READY.

Para la lectura y escritura de archivos de datos debemos usar el comando OPEN y un canal del 2 al 14. Con los comandos PRINT# e INPUT# podemos escribir y leer variables. A estos comandos se les debe pasar como primer parámetro el número de referencia del archivo y como segundo parámetro la variable. El comando INPUT# no es posible utilizarlo directamente, es necesario ejecutarlo desde un programa. La disquetera permite escribir archivos de tres formas:

  • Secuencial: Es la forma más sencilla, se escribe y lee el archivo de principio a fin.
  • Relativa: El archivo se compone de registros que se pueden escribir y leer individualmente.
  • Aleatoria: Se escribe directamente en los bloques, es la forma más versátil y por lo tanto compleja.

A continuación se muestra un ejemplo de escritura y lectura secuencial. Para ver los otros dos métodos se puede consultar el manual de la disquetera donde se explica con detalle su uso. Cuando se abre un archivo secuencial en el cuarto parámetro se indica el nombre, el tipo de archivo (S de secuencial) y el modo (W = escritura, R = lectura).

10 A=10
20 B$="CADENA DE TEXTO"
30 OPEN 2,8,2,"DATOS1,S,W"
40 PRINT# 2,A
50 PRINT# 2,B$
60 CLOSE 2

RUN

READY.
10 OPEN 2,8,2,"DATOS1,S,R"
20 INPUT# 2,A
30 INPUT# 2,B$
40 CLOSE 2
50 PRINT A
60 PRINT B$

RUN
 10
CADENA DE TEXTO

READY.

Una vez creado el archivo secuencial podemos listar nuevamente los archivos para ver como se muestra el nuevo archivo. En la tercera columna se puede ver el tipo de archivo (PRG = programa, SEQ = archivo secuencial).

LOAD "$",8

SEARCHING FOR $
LOADING
READY.

LIST

0 "DISCO1          " 01 2a
1    "PROGRAMA1"        PRG
1    "PROGRAMA2"        PRG
1    "DATOS1"           SEQ
661 BLOCKS FREE.
READY.

A través del canal 15 además del comando NEW para formatear el disquete se pueden enviar otros comandos. A continuación se muestra una lista con el comando, su descripción y los parámetros que hay que pasarle.

  • COPY: Copiar archivo. Archivo Copia = Archivo Original.
  • RENAME: Renombrar archivo. Nuevo Nombre = Antiguo Nombre.
  • SCRATCH: Eliminar archivo. Nombre.
  • INITIALIZE: Devolver la disquetera a su estado inicial.
  • VALIDATE: Reorganizar el disquete para que se puedan usar todos los bloques libres.

Si vamos a enviar varios comandos podemos dejar abierto el canal y enviar los comandos con PRINT#. Si volvemos a listar el contenido del disquete veremos los cambios.

OPEN 1,8,15

PRINT# 1,"COPY:DATOS2=DATOS1"
PRINT# 1,"RENAME:PROGRAMA3=PROGRAMA2"
PRINT# 1,"SCRATCH:DATOS1"
PRINT# 1,"INITIALIZE"
PRINT# 1,"VALIDATE"

CLOSE 1

READY.
0 "DISCO1          " 01 2a
1    "PROGRAMA1"        PRG
1    "PROGRAMA3"        PRG
1    "DATOS2"           SEQ
661 BLOCKS FREE.
READY.

Estas son las instrucciones básicas para utilizar la disquetera. En el manual de la disquetera se puede profundizar en el uso de los comandos, las otras formas de escribir archivos y la programación del controlador de disco. En el siguiente artículo analizo la mecánica y electrónica de la disquetera.

No hay comentarios:

Publicar un comentario