Muchos de los primeros sistemas de microcomputadoras y computadoras domésticas utilizaban cintas de casete como un sistema económico de almacenamiento de datos en cinta magnética . En este artículo se enumeran algunos de los formatos más destacados de la historia.
Como la interoperabilidad entre plataformas era difícil, no había mucho sentido ni se hacía mucho esfuerzo para utilizar formatos estandarizados. La principal excepción a esta regla era el estándar de Kansas City , que era compatible con la mayoría de las computadoras basadas en bus S-100 y que luego fue adoptado por algunos otros proveedores, como BBC Computer y MSX . También se utilizó como medio de intercambio en algunas revistas e incluso se transmitió por radio en Europa.
Uno de los primeros esfuerzos para desarrollar un microordenador para uso doméstico se llevó a cabo a principios de la década de 1970 en RCA y condujo al diseño del procesador COSMAC . Como parte de este proceso, se desarrolló una interfaz de casete. Esta utilizaba un sistema de modulación por desplazamiento de frecuencia (FSK), con ceros binarios ("espacio") representados por un ciclo de una señal de 2 kHz y unos ("marca") como un ciclo de 0,8 kHz. Los bytes se escribían con un solo bit de marca, ocho bits de datos y un bit de paridad impar final . Los archivos se prefijaban con cuatro segundos de señales de espacio para proporcionar recuperación de reloj y luego todos los datos se escribían en una sola secuencia. No había soporte para leer y escribir los datos en el sistema operativo básico ; los usuarios tenían que escribir su propio programa de carga para hacerlo, aunque se proporcionó la versión de ejemplo hexadecimal del código y es bastante pequeña. [1]
El sistema de cintas intercambiables para aficionados (HITS) fue presentado por Jerry Ogdin en un artículo de septiembre de 1975 en la revista Popular Electronics . A diferencia de casi todos los demás sistemas de la época, HITS no utilizaba FSK como mecanismo de almacenamiento; en su lugar, utilizaba modulación por ancho de pulso o PWM. Se podía utilizar cualquier frecuencia portadora adecuada , sugiriendo 2000 Hz. El artículo continúa señalando que el concepto básico funciona bien en cualquier frecuencia y que el sistema es capaz de grabar datos a una velocidad de aproximadamente 1 ⁄ 4 de la portadora. Esto significa que una portadora de 10 kHz permite velocidades de aproximadamente 2500 bit/s. [2]
Los ceros se registraron como pulsos cortos y los unos como largos, con un tiempo de bit total de 2,5 milisegundos nominales cuando se usaban a 2 kHz. Las longitudes de pulso se midieron registrando el tiempo entre la transición de apagado a encendido cuando la portadora se encendía y la transición de encendido a apagado cuando volvía a caer. Esto se comparó con el tiempo entre el encendido a apagado y el siguiente apagado a encendido que marcaba el inicio del siguiente bit. Si la parte de encendido del pulso era más corta que el período de apagado, era un 0; si la parte de encendido era más larga que el de apagado, era un 1. Esto significaba que cada bit de la grabación se cronometraba automáticamente, lo que le permitía sobrevivir fácilmente al estiramiento de la cinta y otros problemas que cambiaban la frecuencia o la velocidad de reproducción. [2]
Se proporcionaron programas de código ensamblador para leer y escribir en máquinas Intel 8080. [2]
El Kansas City Standard (KCS) fue uno de los pocos formatos de casete que se estandarizó hasta cierto punto. Fue creado por un grupo de fabricantes de buses S-100 en una reunión organizada por Byte Magazine en noviembre de 1975 en Kansas City . [3]
KCS era un sistema FSK simple que registraba los ceros como cuatro ciclos de un tono de 1200 Hz y los unos como ocho ciclos de 2400 Hz. Esto produce una velocidad de datos general de 300 Hz. Los datos se registraban en bytes de ocho bits, el bit menos significativo primero, con un bit de paridad agregado a los datos de siete bits si era necesario. Se agregaba un solo espacio al frente y una sola marca al final para actuar como bits de inicio y fin. Los bytes se escribían individualmente, y el tono regresaba a la frecuencia de la marca entre caracteres. Si se escribían datos más cortos, por ejemplo, códigos ASCII de seis bits , los bits no utilizados se rellenaban con una marca al final para completar ocho bits. Los datos se escribían utilizando una versión ligeramente modificada de la codificación Manchester . [3]
No se especificó ningún formato de archivo más allá de agregar cinco segundos de marcas al comienzo del archivo, ni se proporcionó ningún código de ejemplo. Esto lo proporcionarían los proveedores de las tarjetas enchufables. [3]
CUTS era una versión más rápida del sistema KCS, desarrollado por Processor Technology . Utilizaba un solo ciclo de 1200 Hz para un espacio y dos ciclos de 2400 Hz para una marca. Esto hacía que la velocidad de datos efectiva fuera de 1200 bit/s, cuatro veces la de la versión KCS. La placa CUTS S-100 podía soportar tanto CUTS como KCS para lectura y escritura y podía soportar dos pletinas de cinta desde una sola placa. [4] Acorn Computers Ltd implementó tanto el KCS original de 300 baudios como la variación CUTS de 1200 baudios en sus BBC Micro y Acorn Electron . [5] [a]
MSX llevó esto un paso más allá hasta los 2400 bit/s al pasar a frecuencias más altas, utilizando un único ciclo de 2400 Hz para un espacio y dos ciclos de 4800 Hz para una marca. [6] Además, MSX definió un formato de archivo basado en bloques, aunque cambió varias veces. Los bloques podían contener entre 0 y 255 bytes de datos con información de encabezado y una suma de comprobación de un byte, cambiando más tarde a una comprobación de redundancia cíclica (CRC) de 16 bits . [7]
Después de presentar CUTS, Bob Marsh se acercó a Bob Jones, el editor de la revista Interface Age , para hablar sobre la posibilidad de incluir grabaciones de discos Flexi en la revista como mecanismo de distribución. Su primer intento no funcionó y pasaron a otros proyectos. El concepto fue retomado por Daniel Meyer y Gary Kay de Southwest Technical Products (SWTPC), quienes consiguieron que Robert Uiterwyk proporcionara su programa de interpretación BASIC 4K para el Motorola 6800 en formato KCS. Fueron necesarios varios intentos antes de que se les ocurriera un proceso viable para producir los discos. El número de mayo de 1977 de Interface Age contiene el primer " floppy ROM ", un disco de 33 1 ⁄ 3 RPM que contiene aproximadamente seis minutos de audio estándar de Kansas City. [8] Se distribuyeron varios discos adicionales de este tipo.
La variante CUTS de 1200 baudios también se utilizó como base para el sistema BASICODE , que transmitía programas BASIC por radio comercial . [9] En este caso, se agregó al archivo un encabezado y pie de página de cinco segundos de la señal de 2400 Hz, y el programa se envió como una única serie larga de bytes ASCII . Los bytes se enviaron con un solo bit de inicio de marca, ocho bits de datos que contenían un código ASCII de siete bits con el bit más significativo establecido en 1 y un solo bit de parada de marca. Los usuarios grababan los programas en cinta usando su equipo estéreo y luego leían las cintas en sus decks de computadora existentes. [10]
El Apple I introdujo un sistema de casete basado en una tarjeta de expansión similar al KCS, que grababa un único ciclo de 2000 Hz para un espacio y un único ciclo de 1000 Hz para una marca. Esto dio como resultado una velocidad promedio de aproximadamente 1500 bit/s. El controlador de dispositivo asociado en PROM ofrecía un modo interactivo que permitía a los usuarios escribir ubicaciones de memoria en la cinta. Por ejemplo, al escribir E000.EFFFR
se leían (la R al final) datos de la cinta en las ubicaciones de memoria $E000 a $EFFF (4 kB de datos). Al escribir, se añadían 10 segundos de la señal de la marca como encabezado antes de comenzar a escribir los datos solicitados. [11]
El Apple II trasladó la interfaz de casete a la placa base e introdujo varios cambios en el formato. Las señales de marca y espacio permanecieron iguales que en la versión original, pero el encabezado ahora era de diez segundos a 770 Hz seguido de un nuevo "tono de sincronización" de medio ciclo de 2500 Hz y medio ciclo de 2000 Hz. Los datos que seguían al encabezado se recodificaban como antes, pero también se les adjuntaba una suma de comprobación de 8 bits . Applesoft BASIC guardaba los programas de usuario como dos "registros", el primero consistía en la señal del encabezado seguida de la longitud del programa y la suma de comprobación y el segundo con la señal del encabezado, los datos del programa y la suma de comprobación. [12]
El formato de la TI-99/4 se controlaba mediante pines de E/S internos que se activaban con la frecuencia necesaria para producir los tonos adecuados en el casete. Esto se lograba mediante el chip de soporte TMS9901, que ofrecía varios divisores de reloj. Para las operaciones con casete, el divisor de reloj se configuraba en 17 y la entrada al chip era el reloj principal de 3 MHz del sistema dividido por 64. Por lo tanto, la salida del TMS9901 era 17 / (3 MHz / 64) = 363,6 microsegundos, o 2750 Hz. Para escribir un uno en la cinta, la señal se activaba con cada salida de reloj, mientras que un cero se saltaba un ciclo. El resultado era que una marca eran dos ciclos de 1379 Hz, mientras que los espacios eran un solo ciclo de 690 Hz. La velocidad de datos resultante era de unos 700 bit/s. [13]
El sistema también incluía un formato de archivo simple que consistía en una entrada de 768 bytes seguida de un encabezado con el número de bloques del archivo. Los datos se codificaban en bloques; estos empezaban con una entrada de 8 bytes con espacios y una sola marca, luego 64 bytes de datos y finalmente una suma de comprobación de 1 byte, para una longitud total de 73 bytes. Cada bloque se repetía dos veces como un sistema de corrección de errores, reduciendo así a la mitad la tasa de datos efectiva. [13]
La introducción al comienzo del archivo producía un tono constante que se utilizaba para medir la velocidad de datos real en la cinta, que podía cambiar debido al estiramiento de la cinta o a diferencias entre máquinas. Durante una lectura, el sistema configuraba un temporizador de entrada en el valor máximo de $3FFF y luego leía un byte. Cuando el byte se completaba, se examinaba el temporizador para ver cuántos ciclos habían pasado. Podrían ser 16 o 18, por ejemplo. Luego, este valor se ingresaba en el temporizador de reloj. Durante las lecturas, si la señal no se sincronizaba durante un ciclo de reloj, era un 0; si lo hacía, era un espacio. [13]
El formato de cinta Commodore, introducido en el Commodore PET , utiliza una combinación de metodología FSK y PWM. Los bits se codificaban dentro de un período de tiempo fijo similar al PWM, pero debido a que el hardware de E/S en la mayoría de los modelos Commodore respondía solo al flanco descendente de un ciclo, no eran capaces de una verdadera decodificación PWM. En cambio, el período de tiempo fijo contenía dos ciclos completos de diferentes longitudes para simular un pulso PWM y un período de "apagado". Los ceros se codificaban mediante un ciclo "corto" [b] seguido de un ciclo "medio", mientras que los unos se codificaban como un ciclo medio y luego un ciclo corto. Las señales se enviaban directamente desde el pin de salida como una onda cuadrada que era "redondeada" por el medio de grabación. Se utilizó un tercer ciclo "largo" para tonos especiales: largo-medio marcaba el comienzo de cada byte, largo-corto marcaba el final de los datos. [14] [15]
El uso principal del sistema era con Commodore BASIC , que grababa un encabezado que contenía una serie de bytes utilizados como una forma para que el sistema rastreara la velocidad de la cinta, seguido por el nombre del archivo, el tamaño y otros datos. El encabezado se repetía luego como una forma de lidiar con la corrupción de datos. Los datos del programa seguían como un único y largo flujo de bytes, y se escribían una segunda vez por la misma razón. [14]
Fue posible eludir las rutinas del formato de cinta Commodore y acceder directamente al hardware de E/S, lo que permitió el desarrollo generalizado de cargadores "turbo" para computadoras Commodore. [14]
Los ordenadores Atari de 8 bits utilizan un sistema basado en consultas con ingenieros de grabación, y uno de los resultados más obvios es el uso de dos frecuencias que no son armónicas entre sí. Los unos se representan con 5327 Hz y los ceros con 3995 Hz, alternando a 600 Hz. [16]
El sistema operativo define un formato de archivo orientado a paquetes con 128 bytes de carga útil con dos bytes de encabezado, un byte de control y una suma de comprobación posterior, lo que hace que el paquete tenga una longitud total de 132 bytes. Los dos bytes de encabezado son caracteres 55 hexadecimales, binarios 01010101 01010101, que son utilizados por los circuitos para realizar la recuperación del reloj . El byte de control tiene tres valores: $FC es un paquete de longitud completa, $FA un paquete corto con la longitud almacenada antes de la suma de comprobación y, finalmente, $FE es el marcador de fin de archivo (EOF). Los paquetes cortos y los EOF aún contienen una carga útil completa de 128 bytes; simplemente ignoran las partes no utilizadas. [16]
Los paquetes están separados por períodos cortos de 5327 Hz puros, un tono de escritura previo a la grabación y un intervalo posterior a la grabación, que, sumados, forman el "inter-record gap" o IRG. Cuando se abre para escribir, el controlador puede configurarse en uno de dos modos, con IRG cortos o largos. Para formatos binarios, donde los datos se copian directamente a la memoria o desde ella sin interpretación, se utiliza el IRG corto, de unos 0,25 segundos. Para otros usos, como un programa de lenguaje de programación BASIC en formato de texto que debe convertirse línea por línea al formato binario interno, se utiliza el IRG normal, de 3 segundos. Este tiempo se eligió para permitir que la platina de casete se detuviera por completo y se reiniciara antes de llegar al siguiente paquete, lo que le permite al sistema el tiempo que necesite para procesar el paquete. [16]
Aunque existe un formato de paquete estándar, no hay un formato de archivo definido que utilice el sistema en su conjunto. Lo más parecido es un encabezado en los casetes de arranque, que contiene solo 6 bytes de datos y carece de un nombre de archivo u otra información de identificación. El paquete de arranque contiene el número de registros (hasta 255) en el segundo byte, los bytes bajo y alto de la dirección a la que se va a cargar, y la dirección baja y alta de la ubicación a la que se va a saltar una vez que se haya completado la carga. [16]
Además del formato de paquete estándar, el controlador le da al usuario control directo sobre los motores de la unidad de cinta y la lectura y escritura de los tonos. Esto se utiliza con cintas de audio para controlar la reproducción. Un escenario típico tiene una grabación de audio en la pista "izquierda" y ráfagas cortas de 5327 Hz en ubicaciones clave dentro del audio. Luego, el programa inicia el motor de la cinta, lo que hace que el audio se dirija a través del altavoz del televisor, esperando que aparezca un 1 en el puerto de E/S. Cuando esto ocurre, el programa detiene la cinta y espera alguna acción del usuario antes de iniciarla nuevamente. [16]