Tecnologia MOS CIA - MOS Technology CIA

Image
Configurazione dei pin del 6526 CIA
Image
I primi 6526 della CIA erano ancora in un costoso pacchetto di ceramica con contatti in oro. Le versioni successive sono state prodotte in confezioni di plastica più economiche.
Image
CIA MOS 6526A in confezione di plastica
Image
MOS 8520A in un Amiga 1000

Il 6526/8520 Complex Interface Adapter ( CIA ) era un circuito integrato realizzato dalla tecnologia MOS . Serve come controller della porta I / O per la famiglia di microprocessori 6502 , fornendo funzionalità I / O parallele e seriali , nonché timer e un orologio TOD (Time-of-Day). L'uso più importante del dispositivo era nel Commodore 64 e nel Commodore 128 (D) , ognuno dei quali includeva due chip CIA. I drive per floppy disk Commodore 1570 e Commodore 1571 contenevano un CIA ciascuno. Inoltre, gli home computer Amiga e il drive per floppy disk Commodore 1581 impiegavano una variante modificata del circuito CIA chiamato 8520. 8520 è funzionalmente equivalente al 6526 tranne che per il circuito TOD semplificato .

I/O Parallel paralleli

La CIA aveva due porte I/O parallele bidirezionali a 8 bit . Ciascuna porta aveva un corrispondente registro di direzione dei dati, che consentiva di impostare individualmente ciascuna linea dati in modalità di input o output. Una lettura di queste porte restituiva sempre lo stato delle singole linee, indipendentemente dalla direzione dei dati che era stata impostata.

I/O seriale

Un registro a scorrimento bidirezionale interno a 8 bit ha consentito alla CIA di gestire l' I/O seriale . Il chip potrebbe accettare input seriale sincronizzato da una sorgente esterna e potrebbe inviare output seriale sincronizzato con uno dei timer programmabili incorporati. Un interrupt veniva generato ogni volta che veniva completato un trasferimento seriale a 8 bit. È stato possibile realizzare una semplice " rete " collegando insieme il registro a scorrimento e le uscite di clock di più computer. Il bitrate massimo è di 500 kbit/s per la versione a 2 MHz.

La CIA incorpora una correzione a un bug nel registro di spostamento seriale nel precedente 6522 VIA . La CIA era originariamente intesa per consentire una comunicazione veloce con un'unità disco, ma alla fine non poteva essere utilizzata a causa del desiderio di mantenere la compatibilità dell'unità disco con il VIC-20 ; in pratica il firmware dell'unità 1541 doveva essere reso ancora più lento del suo predecessore Vic-20 per aggirare un comportamento del processore video del C64 , che, quando disegnava lo schermo, spegneva la CPU per 40 microsecondi ogni 512 microsecondi e in quella timelice non riesco ad ascoltare l'autobus, rischiando di perderne un po'.

Timer di intervallo

Erano disponibili due timer a intervalli programmabili, ciascuno con una precisione inferiore al microsecondo . Ciascun timer era costituito da un contatore decrescente preimpostabile di sola lettura a 16 bit e da un corrispondente latch di sola scrittura a 16 bit . Ogni volta che veniva avviato un timer, il latch del timer veniva automaticamente copiato nel suo contatore, e il contatore decrementava quindi con ogni ciclo di clock fino all'underflow, al quale sarebbe stato generato un interrupt se la CIA fosse stata configurata per farlo.

Il timer potrebbe funzionare in modalità "one-shot", fermandosi dopo l'underflow, o in modalità "continua", ricaricando il valore di latch e riavviando il ciclo del timer. Oltre a generare interruzioni, l'uscita del timer potrebbe anche essere collegata alla seconda porta di I/O.

Come configurato nel Commodore 64 e nel Commodore 128 , il timing della CIA era controllato dal clock di sistema Ø2, nominalmente un MHz . Ciò significava che i timer diminuivano a intervalli di circa un microsecondo, il periodo di tempo esatto era determinato dal fatto che il sistema utilizzava lo standard video NTSC o PAL . Nel C-128, è stato impiegato l' allungamento dell'orologio in modo che i tempi della CIA non fossero influenzati dal fatto che il sistema funzionasse in modalità LENTA o VELOCE.

È stato possibile generare intervalli di temporizzazione relativamente lunghi programmando il timer B per contare gli underflow del timer A. Se entrambi i timer fossero caricati con il valore di intervallo massimo di 65.535, risulterebbe un intervallo di tempo di un'ora, 11 minuti, 34 secondi.

Orologio dell'ora del giorno (TOD)

Un orologio in tempo reale è incorporato nella CIA, fornendo un dispositivo di cronometraggio più adatto alle esigenze umane rispetto alla precisione al microsecondo dei timer a intervalli. L'ora viene conservata nel formato americano di 12 ore AM/PM. L'orologio TOD è costituito da quattro registri di lettura/scrittura: ore (con il bit 7 che funge da flag AM/PM), minuti, secondi e decimi di secondo. Tutti i registri vengono letti in formato BCD , semplificando così il processo di codifica/decodifica.

La lettura dai registri restituirà sempre l'ora del giorno. Al fine di evitare un errore di riporto durante il recupero dell'ora, la lettura del registro delle ore interromperà immediatamente l'aggiornamento del registro, senza alcun effetto sull'accuratezza del cronometraggio interno. Una volta letto il registro dei decimi, l'aggiornamento riprenderà. E 'possibile leggere "al volo" qualsiasi registro diverso dal registro delle ore, rendendo l'utilizzo di un orologio TOD funzionante come timer una pratica applicazione. Se si legge il registro delle ore, invece, è indispensabile leggere successivamente il registro delle decime. In caso contrario, tutti i registri TOD rimarranno "congelati".

L'impostazione dell'ora implica la scrittura dei valori BCD appropriati nei registri. Un accesso in scrittura al registro delle ore fermerà completamente l'orologio. L'orologio non ripartirà finché non sarà stato scritto un valore nel registro dei decimi. A causa dell'ordine in cui i registri appaiono nella mappa di memoria del sistema , è sufficiente un semplice ciclo per scrivere i registri nell'ordine corretto. È consentito scrivere solo sul registro dei decimi per "spingere" l'orologio in azione, in cui a seguito di un reset hardware, l'orologio partirà alle 1:00:00.0.

Oltre alle sue funzioni di cronometraggio, il TOD può essere configurato per fungere da sveglia , facendo in modo che generi una richiesta di interruzione in qualsiasi momento desiderato. A causa di un bug in molti 6526 (vedi anche errata sotto), l'IRQ dell'allarme non si verificava sempre quando la componente dei secondi dell'ora dell'allarme è esattamente zero. La soluzione consiste nell'impostare il valore dei decimi dell'allarme su 0,1 secondi.

Il circuito interno dell'orologio TOD è progettato per essere pilotato da un segnale sinusoidale a 50 o 60 Hz . Come utilizzato nel C-64 e C-128(D), l'alimentatore del computer forniva tale segnale dalla rete, risultando in un cronometro stabile con poca deriva a lungo termine. La capacità di lavorare con entrambe le frequenze della linea elettrica ha permesso di utilizzare una singola versione del 6526 in computer operati in paesi con alimentazione a 50 o 60 Hz. È importante notare che, contrariamente alla credenza popolare, gli standard video NTSC o PAL non sono direttamente collegati alla frequenza di rete. Inoltre, alcuni computer non hanno ricavato la loro frequenza di clock TOD dalla fonte di alimentazione di rete. Ad esempio, entrambe le varianti NTSC e PAL del Commodore SX-64 utilizzano un clock TOD a 60 Hz fornito da un cristallo dedicato. Il sistema operativo KERNAL nel Commodore 64, ad esempio, determinerà lo standard video durante l'avvio del sistema, ma non cerca né di identificare la frequenza di clock TOD fornita né di inizializzare correttamente i CIA su macchine a 50 Hz. Pertanto, è responsabilità di qualsiasi software applicativo che desideri utilizzare la funzione TOD di CIA per determinare la frequenza fornita e impostare il flag CIA di conseguenza. In caso contrario, l'orologio potrebbe deviare rapidamente dall'ora corretta.

La revisione 8520 della CIA, utilizzata nell'Amiga e nell'unità disco Commodore 1581 , modificò l'orologio per essere un contatore binario a 24 bit, sostituendo il formato BCD del 6526. Un altro comportamento era simile, tuttavia .

Versioni

La CIA era disponibile nelle versioni da 1 MHz (6526), ​​2 MHz (6526A) e 3 MHz (6526B). Il pacchetto era un DIP in ceramica o plastica standard a 40 pin JEDEC . L'8520 CIA, con il suo orologio modificato, è stato utilizzato nei computer Amiga .

Commodore ha incorporato una logica CIA-like ridotta (solo 4 registri) per il Commodore 1571 ridotto all'interno del C128DCR (vedi Commodore 128 ) in un array di porte chiamato 5710 che contiene anche altre funzioni. Il 5710 CIA ha l'orologio seriale per l'interfaccia seriale veloce cablata a un valore Timer A equivalente CIA6526 di 5, che porta a un tempo per bit di 5μs in trasmissione. Questo è diverso da quello che era un valore Timer A di 6 nel 6526 CIA nel Commodore 1571 originale . Il 5710 CIA non contiene timer o registri di controllo timer. Contiene solo due registri di porta e il registro per controllare lo shifter seriale e il suo evento.

Errata

Oltre alla già citata sveglia interrupt insetto, molti CIAs esibito un difetto in cui la parte non riuscirebbe a generare un timer B hardware interrupt se il registro di controllo di interruzione (ICR) è stato letto uno o due cicli di clock prima del momento in cui l'interrupt deve si sono effettivamente verificati. Questo difetto, così come gli errori logici nel sistema operativo fornito dal Commodore (8 bit), causava frequenti errori pseudo -RS-232 nei computer Commodore 64 e Commodore 128 quando funzionavano a velocità di trasmissione più elevate.

Riferimenti

link esterno