Articulo de referencia

Tecnología MOS CIA

Configuración de pines del 6526 CIA Los primeros modelos 6526 CIA todavía venían en un costoso encapsulado de cerámica con contactos de oro. Las versiones posteriores se fabrica...

Configuración de pines del 6526 CIA
Los primeros modelos 6526 CIA todavía venían en un costoso encapsulado de cerámica con contactos de oro. Las versiones posteriores se fabricaron en un encapsulado de plástico más económico.
CIA MOS 6526A en paquete de plástico
MOS 8520A en un Amiga 1000

El adaptador de interfaz compleja ( CIA ) 6526/8520 era un circuito integrado fabricado por MOS Technology . Funcionaba como controlador de puerto de E/S para la familia de microprocesadores 6502 , proporcionando capacidades de E/S paralelas y seriales , así como temporizadores y un reloj de hora del día (TOD). El uso más destacado del dispositivo fue en el Commodore 64 y el Commodore 128(D) , cada uno de los cuales incluía dos chips CIA. Las unidades de disquete del Commodore 1570 y el Commodore 1571 contenían un CIA cada una. Además, los ordenadores domésticos Amiga y la unidad de disquete del Commodore 1581 empleaban una variante modificada del circuito CIA llamada 8520. El 8520 es funcionalmente equivalente al 6526, excepto por el circuito TOD simplificado . El predecesor del CIA fue el PIA .

E/S paralela

La CIA contaba con dos puertos de E/S paralelos bidireccionales de 8 bits . Cada puerto disponía de un registro de dirección de datos correspondiente, que permitía configurar individualmente cada línea de datos como entrada o salida. La lectura de estos puertos siempre devolvía el estado de las líneas individuales, independientemente de la dirección de datos configurada.

E/S serie

Un registro de desplazamiento bidireccional interno de 8 bits permitía al CIA gestionar la entrada/salida serie . El chip podía aceptar entrada serie sincronizada con una fuente externa y enviar salida serie sincronizada con uno de los temporizadores programables integrados. Se generaba una interrupción cada vez que finalizaba una transferencia serie de 8 bits. Era posible implementar una red sencilla conectando las salidas del registro de desplazamiento y del reloj de varios ordenadores. La velocidad de bits máxima es de 500  kbit/s para la  versión de 2 MHz.

La CIA incorpora una corrección a un error en el registro de desplazamiento serie del VIA 6522 anterior . La CIA fue concebida originalmente para permitir una comunicación rápida con una unidad de disco, pero finalmente no se pudo utilizar debido al deseo de mantener la compatibilidad de la unidad de disco con el VIC-20 ; en la práctica, el firmware de la unidad 1541 tuvo que hacerse aún más lento que su predecesora VIC-20 para sortear un comportamiento del procesador de vídeo del C64 , que, al dibujar la pantalla, apagaba la CPU durante 40 microsegundos cada 512 microsegundos y en ese intervalo de tiempo no podía escuchar el bus, con el riesgo de perder algún bit. [ 1 ] [ 2 ]

Temporizadores de intervalo

Se disponía de dos temporizadores de intervalo programables, cada uno con una precisión inferior al microsegundo . Cada temporizador constaba de un contador descendente preajustable de solo lectura de 16 bits y un pestillo correspondiente de solo escritura de 16 bits . Al iniciar un temporizador, el pestillo se copiaba automáticamente en su contador, que luego disminuía con cada ciclo de reloj hasta que se producía un desbordamiento negativo, momento en el que se generaba una interrupción si el controlador CIA estaba configurado para ello.

El temporizador podía funcionar en modo "de un solo disparo", deteniéndose tras un desbordamiento negativo, o en modo "continuo", recargando el valor del registro y reiniciando el ciclo. Además de generar interrupciones, la salida del temporizador también podía conectarse al segundo puerto de E/S.

En los Commodore 64 y Commodore 128 , la temporización del CIA estaba controlada por el reloj del sistema Ø2, de un MHz . Esto significaba que los temporizadores se decrementaban aproximadamente a intervalos de un microsegundo, y el período exacto dependía de si el sistema utilizaba el estándar de vídeo NTSC o PAL . En el C-128, se empleó la extensión del reloj , por lo que la temporización del CIA no se veía afectada por el modo de funcionamiento (LENTO o RÁPIDO).

Era posible generar intervalos de tiempo relativamente largos programando el temporizador B para que contara los desbordamientos negativos del temporizador A. Si ambos temporizadores se cargaban con el valor máximo de intervalo de 65.535, se obtendría un intervalo de tiempo de una hora, 11 minutos y 34 segundos.

Reloj de hora del día (TOD)

El CIA incorpora un reloj en tiempo real, que proporciona un sistema de cronometraje más adecuado a las necesidades humanas que la precisión de microsegundos de los temporizadores de intervalo. La hora se registra en formato estadounidense de 12 horas (AM/PM). El reloj TOD consta de cuatro registros de lectura/escritura: horas (con el bit 7 como indicador AM/PM), minutos, segundos y décimas de segundo. Todos los registros se leen en formato BCD , lo que simplifica el proceso de codificación/decodificación.

La lectura de los registros siempre devolverá la hora del día. Para evitar un error de acarreo al obtener la hora, la lectura del registro de horas detendrá inmediatamente la actualización de los registros, sin afectar la precisión del cronometraje interno. Una vez leído el registro de décimas, la actualización se reanudará. Es posible leer cualquier registro, excepto el de horas, sobre la marcha, lo que hace que el uso de un reloj TOD en funcionamiento como temporizador sea una aplicación práctica. Sin embargo, si se lee el registro de horas, es esencial leer posteriormente el registro de décimas. De lo contrario, todos los registros TOD permanecerán bloqueados.

Para ajustar la hora, es necesario escribir los valores BCD correspondientes en los registros. Un acceso de escritura al registro de las horas detendrá completamente el reloj. Este no se reiniciará hasta que se haya escrito un valor en el registro de las décimas. Debido al orden en que aparecen los registros en el mapa de memoria del sistema , basta con un bucle simple para escribirlos en el orden correcto. Es posible escribir únicamente en el registro de las décimas para poner en marcha el reloj, de modo que, tras un reinicio por hardware, el reloj comenzará a marcar la 1:00:00.0.

Además de sus funciones de cronometraje, el TOD se puede configurar para que funcione como despertador , programando una solicitud de interrupción en el momento deseado. Debido a un error en muchos chips 6526 (véase también la errata más abajo), la interrupción de la alarma no siempre se producía cuando el componente de segundos del tiempo de alarma era exactamente cero. La solución consiste en establecer el valor de las décimas de la alarma en 0,1 segundos.

El circuito interno del reloj TOD está diseñado para funcionar con una señal sinusoidal de  50 o 60 Hz . Como en los ordenadores C-64 y C-128(D), la fuente de alimentación del ordenador suministraba dicha señal desde la red eléctrica, lo que resultaba en un cronómetro estable con poca deriva a largo plazo. La capacidad de funcionar con ambas frecuencias de la red eléctrica permitía utilizar una única versión del 6526 en ordenadores que operaban en países con alimentación de 50 o 60 Hz. Contrariamente a la creencia popular, los estándares de vídeo NTSC o PAL no están directamente vinculados a la frecuencia de la red eléctrica. Además, algunos ordenadores no obtenían la frecuencia de su reloj TOD de la fuente de alimentación. Por ejemplo, tanto las variantes NTSC como PAL del Commodore SX-64 utilizan un reloj TOD de 60 Hz suministrado por un cristal dedicado. El sistema operativo KERNAL del Commodore 64, por ejemplo, determina el estándar de vídeo durante el arranque del sistema, pero no intenta identificar la frecuencia del reloj TOD suministrado ni inicializar correctamente las CIA en máquinas con alimentación de 50 Hz. Por lo tanto, es responsabilidad de cualquier software de aplicación que desee utilizar la función TOD de cualquiera de las CIA determinar la frecuencia suministrada y configurar el indicador de la(s) CIA en consecuencia. De no hacerlo, el reloj podría desajustarse rápidamente.   

La revisión 8520 de la CIA, utilizada en la Amiga y en la unidad de disquete Commodore 1581 , modificó el reloj de hora del día para que fuera un contador binario de 24 bits, reemplazando el formato BCD del 6526. Sin embargo, el resto del comportamiento era similar.

Versiones

El chip CIA estaba disponible en versiones de 1 MHz (6526), ​​2  MHz (6526A) y 3  MHz (6526B). El encapsulado era un DIP de cerámica o plástico de 40 pines, estándar JEDEC . El chip CIA 8520, con su reloj de hora del día modificado, se utilizaba en los ordenadores Amiga .

Lógica tipo CIA reducida (solo 4 registros) integrada en el Commodore 1571 de menor costo , dentro del C128DCR (ver Commodore 128 ), en una matriz de puertas llamada 5710 que también contiene otras funciones. El CIA 5710 tiene el reloj serie para la interfaz serie rápida cableado a un valor de temporizador A equivalente a 5 del CIA6526, lo que resulta en un tiempo por bit de 5 μs en la transmisión. Esto es diferente del valor de temporizador A de 6 que solía tener el CIA 6526 en el Commodore 1571 original . El CIA 5710 no contiene registros de temporizador ni de control de temporizador. Solo contiene dos registros de puerto y el registro para controlar el desplazador serie y su evento.

Errata

Además del mencionado error de interrupción del reloj despertador, muchos chips CIA presentaban un defecto que impedía que el componente generara una interrupción de hardware del temporizador B si el registro de control de interrupciones (ICR) se leía uno o dos ciclos de reloj antes de que la interrupción debería haberse producido. Este defecto, junto con errores lógicos en el sistema operativo (de 8 bits) proporcionado por Commodore, provocaba frecuentes errores de pseudo- RS-232 en los ordenadores Commodore 64 y Commodore 128 al funcionar a velocidades de transmisión más altas .

Referencias

  1. Perry, Tekla S.; Wallich, Paul (marzo de 1985). "Historia de caso de diseño: el Commodore 64" (PDF) . IEEE Spectrum . 22 (3): 48– 58. doi : 10.1109/MSPEC.1985.6370590 . ISSN 0018-9235 . S2CID 11900865. Archivado del original (PDF) el 13 de mayo de 2012. Recuperado el 12 de noviembre de 2011 .  
  2. artículos en c64-wiki.com
  • Hoja de datos del MOS 6526 CIA (formato GIF, comprimido)
  • Hoja de datos del MOS 6526 CIA (formato PDF)