RETRODREAMSAMIGA & SPECTRUM
Menu

← Tutti i chip

cia.chip

DIP-40 · 8520A-1 · disegno, non fotografia

Chip dell'AmigaCommodore (MOS / CSG)

1985

CIA 8520

Il chip delle porte: tastiera, floppy, porta parallela, LED e timer. Ogni Amiga ne ha due.

Il CIA 8520 è il chip di ingresso e uscita dell'Amiga, ereditato dal 6526 del Commodore 64. Ogni macchina ne ha due: il CIA-A legge la tastiera e la porta parallela, accende il LED e toglie di mezzo la ROM all'avvio; il CIA-B comanda il lettore di floppy e le linee di controllo della porta seriale. Ognuno ha anche due timer e un contatore di eventi.

bit di bus
8

Un chip del Commodore 64 rimasto nell'Amiga

CIA sta per Complex Interface Adapter. Il progetto originale è il 6526 della MOS Technology, il chip delle porte del Commodore 64, che ne monta due. Quando Commodore progettò l'Amiga, invece di creare un chip di ingresso e uscita da zero, adattò quello che aveva già: l'8520 è un 6526 con una differenza, l'orologio. Nel 6526 è un orologio vero, con ore, minuti e secondi in BCD; nell'8520 è diventato un semplice contatore binario a 24 bit, che conta impulsi. Per il resto è lo stesso chip.

La specifica interna di Commodore, il disegno 318029, lo descrive come una periferica compatibile con il bus dei 65xx, in contenitore a 40 pin, ed elenca dove fu usato: l'Amiga e il lettore di floppy 1581. Tra i chip Commodore dell'Amiga è l'unico non disegnato per lui, e parla la lingua dei 65xx in una macchina a 68000: il processore ha un clock apposito per queste periferiche, il clock E, a un decimo della sua velocità, ed è su quello che il CIA si sincronizza.

Ce ne sono due in ogni Amiga, dall'A1000 all'A4000, e il sistema li chiama CIA-A e CIA-B. L'eccezione è il CD32: l'Akiko ne ha assorbito le funzioni, e sulla scheda della console non ce n'è nessuno.

Due chip, due mestieri

Ogni CIA ha 16 pin di ingresso e uscita, in due porte a 8 bit, più un registro a scorrimento seriale, un pin di impulso e un ingresso che rileva i fronti. L'Amiga divide i compiti tra i due. Il CIA-A, agli indirizzi dispari a partire da $BFE001, ha tutta la porta B dedicata agli 8 bit di dati della porta parallela, e la porta A piena di bit sparsi: l'OVL, che mette la ROM all'indirizzo zero; il LED di alimentazione, che si accende quando il bit è a zero; quattro segnali di stato del floppy (pronto, traccia zero, protetto, disco cambiato); e i pulsanti di fuoco delle due porte joystick. Il suo registro seriale riceve la tastiera.

Il CIA-B, agli indirizzi pari a partire da $BFD000, ha tutta la porta B al comando del lettore di floppy: motore, selezione di uno di quattro lettori, passo, direzione e lato. La porta A raccoglie le linee di controllo di flusso della porta seriale (DTR, RTS, CTS, DSR, rilevamento portante) e quelle di controllo della porta parallela (BUSY, POUT, SEL). Il suo ingresso dei fronti conta gli impulsi di indice del floppy, uno per giro. Il registro seriale del CIA-B non è usato per niente.

Ognuno parla con il processore su un proprio livello di interruzione: il CIA-A sul livello 2, il CIA-B sul livello 6. E i due condividono una particolarità di progetto: il CIA-A è collegato agli 8 bit bassi del bus dati e il CIA-B agli 8 bit alti, perciò gli indirizzi dell'uno sono dispari e quelli dell'altro pari, e vi si accede solo un byte alla volta.

I due CIA: chi è collegato a cosa
CIA-A · $BFE001 · interruzione di livello 28520OVL · Vedi sulla schedaPA0OVLLED · Vedi sulla schedaPA1LEDCHNG · Vedi sulla schedaPA2CHNGWPRO · Vedi sulla schedaPA3WPROTK0 · Vedi sulla schedaPA4TK0RDY · Vedi sulla schedaPA5RDYFIR0 · Vedi sulla schedaPA6FIR0FIR1 · Vedi sulla schedaPA7FIR1KDAT · Vedi sulla schedaSPKDATKCLK · Vedi sulla schedaCNTKCLKD0 · Vedi sulla schedaPB0D0D1 · Vedi sulla schedaPB1D1D2 · Vedi sulla schedaPB2D2D3 · Vedi sulla schedaPB3D3D4 · Vedi sulla schedaPB4D4D5 · Vedi sulla schedaPB5D5D6 · Vedi sulla schedaPB6D6D7 · Vedi sulla schedaPB7D7STROBE · Vedi sulla schedaPCSTROBEACK · Vedi sulla schedaFLAGACKTOD · Vedi sulla schedaTOD ← 50/60 Hz (fotogrammi) (contatore di eventi)INT2 · Vedi sulla schedaIRQ → INT2CIA-B · $BFD000 · interruzione di livello 68520BUSY · Vedi sulla schedaPA0BUSYPOUT · Vedi sulla schedaPA1POUTSEL · Vedi sulla schedaPA2SELDSR · Vedi sulla schedaPA3DSRCTS · Vedi sulla schedaPA4CTSCD · Vedi sulla schedaPA5CDRTS · Vedi sulla schedaPA6RTSDTR · Vedi sulla schedaPA7DTRBUSY · Vedi sulla schedaSPBUSYPOUT · Vedi sulla schedaCNTPOUTSTEP · Vedi sulla schedaPB0STEPDIR · Vedi sulla schedaPB1DIRSIDE · Vedi sulla schedaPB2SIDESEL0 · Vedi sulla schedaPB3SEL0SEL1 · Vedi sulla schedaPB4SEL1SEL2 · Vedi sulla schedaPB5SEL2SEL3 · Vedi sulla schedaPB6SEL3MTR · Vedi sulla schedaPB7MTRPCnon usatoINDEX · Vedi sulla schedaFLAGINDEXTOD · Vedi sulla schedaTOD ← righe dello schermo (contatore di eventi)INT6 · Vedi sulla schedaIRQ → INT6
  • Tastiera
  • Lettore di floppy
  • Porta parallela
  • Porta seriale (controllo di flusso)
  • Sistema: OVL e LED
  • Pulsanti di fuoco dei joystick

Ogni pin delle porte A e B, con il segnale che l'Amiga vi collega. Fonte: Amiga Hardware Reference Manual, appendice F. Clicca su un segnale per vederlo acceso sulla scheda Amiga 500 rev 8A, nell’esploratore.

Come un tasto arriva al processore

La tastiera dell'Amiga ha un microcontrollore proprio e si collega alla macchina con quattro fili: alimentazione, massa, KCLK (il clock, solo dalla tastiera al computer) e KDAT (i dati, nei due sensi). Ogni tasto genera un codice di 7 bit, e l'ottavo bit dice se è stato premuto (0) o rilasciato (1). La tastiera invia gli 8 bit uno alla volta su KDAT, con un impulso su KCLK per ogni bit, a circa 60 microsecondi per bit: un tasto impiega mezzo millisecondo ad arrivare.

Dal lato Amiga, a ricevere è il registro a scorrimento seriale del CIA-A: KDAT entra dal pin SP e KCLK dal CNT. All'ottavo impulso il byte cade nel registro dati e il CIA solleva un'interruzione. Il software legge il codice e deve rispondere: tira KDAT a zero per 85 microsecondi, la stretta di mano che dice alla tastiera che può inviare il tasto successivo.

Due dettagli mostrano la cura del progetto. La linea è attiva a zero, perciò i bit arrivano invertiti. E il byte parte ruotato: si invia prima il bit 6 e per ultimo il bit 7, quello di premuto o rilasciato. Se tastiera e computer perdono il sincronismo, la tastiera invia degli uno finché non riceve la stretta di mano, e un byte di spazzatura pieno di uno si legge come un tasto rilasciato, che non fa male a nessuno. Poi avvisa con un codice speciale ($F9) e ripete il tasto perso. Provalo nella dimostrazione più in basso.

Amiga 1000Amiga 1000 · 1985
Foto: Rama & Musée Bolo · CC BY-SA 2.0 fr · Wikimedia Commons

Timer e contatore di eventi

Ogni CIA ha due timer a 16 bit. Si carica un valore, il timer conta all'indietro al ritmo del clock E del processore (709 379 volte al secondo in PAL, 715 909 in NTSC, un decimo del clock del 68000) e, arrivato a zero, interrompe e si ricarica. Si possono concatenare per conteggi a 32 bit, contare impulsi esterni dal pin CNT o mettere la propria uscita su un pin della porta B. È con loro che l'AmigaOS misura il tempo.

Il terzo contatore è il TOD, quello che nel 6526 era l'orologio. Nell'Amiga ha guadagnato due usi ingegnosi: quello del CIA-A conta gli impulsi a 50 o 60 Hz di ogni fotogramma, e quello del CIA-B conta le righe dello schermo, 15 625 al secondo in PAL. Entrambi hanno una sveglia che interrompe quando il contatore raggiunge un valore scelto. Essendo contatori a 24 bit, quello del CIA-B fa il giro ogni 18 minuti, e quello del CIA-A dopo quasi quattro giorni.

In tutto, ogni CIA ha cinque fonti di interruzione: i due timer, la sveglia, il registro seriale e l'ingresso dei fronti. Un solo registro, l'ICR, dice quale è scattata, e leggerlo lo azzera, perciò chi lo legge deve gestire tutto quello che c'era. Sotto AmigaOS i programmi non toccano i CIA direttamente: chiedono timer e interruzioni al cia.resource, che spartisce quello che c'è tra il sistema e chi lo chiede.

Il primo a svegliarsi

All'accensione il CIA è tra i primi chip che contano. Un reset mette tutti i pin come ingressi, e siccome hanno resistenze di pull-up, si leggono a uno. Questo include l'OVL, il bit 0 della porta A del CIA-A: a uno, la ROM Kickstart compare all'indirizzo zero, dove il 68000 va a prendere il puntatore dello stack e l'indirizzo di partenza. È l'unico modo in cui il processore può partire, perché all'indirizzo zero c'è normalmente la Chip RAM. Appena in esecuzione, il Kickstart configura i due bit di uscita (OVL e LED) e abbassa l'OVL: la RAM torna all'indirizzo zero e la ROM resta solo al suo posto, in cima alla memoria.

Lo stesso bit del LED comanda il filtro passa-basso dell'audio: per questo, quando un gioco o una demo spegne il filtro, il LED di alimentazione perde luminosità. La pagina della Paula spiega il filtro; qui c'è l'interruttore.

Il contenitore è cambiato negli anni. Negli A1000, A500, A2000 e A3000 l'8520 è un DIP a 40 pin, quasi sempre su zoccolo. Negli A600, A1200 e A4000 è un PLCC a 44 pin saldato alla scheda. Il CD32 non ce l'ha. Dentro, è sempre lo stesso chip del 1985.

Lo sapevi che…

  1. L'indirizzo $BFE001 è tra i più noti dell'Amiga: è il registro in cui si scrive per spegnere il LED, disattivare il filtro audio e nascondere la ROM.

  2. Un tasto impiega circa mezzo millisecondo ad arrivare al CIA: otto bit a 60 microsecondi ciascuno, circa 17 kbit/s.

  3. La tastiera invia il bit di premuto o rilasciato per ultimo, apposta: se perde il sincronismo, la spazzatura che arriva si legge come un tasto rilasciato, che è innocuo.

  4. Chi preme Ctrl-Amiga-Amiga su un A1000 o su alcuni A2000 riceve prima un codice di avviso ($78): la tastiera annuncia che farà il reset dieci secondi dopo.

  5. Il contatore di eventi del CIA-B conta le righe dello schermo, 15 625 al secondo in PAL, e fa il giro dei suoi 24 bit ogni 18 minuti.

  6. Il registro seriale del CIA-B non è usato per niente: ogni Amiga ha una porta seriale sincrona che dorme dentro il chip.

  7. Il Caps Lock è l'unico tasto che invia un codice solo quando lo si preme: il bit di premuto o rilasciato dice allora se la spia si è accesa o spenta.

RUN "DEMO"

Tasto per tasto lungo il filo

La tastiera dell'Amiga invia ogni tasto come 8 bit in serie: 7 di codice e 1 che dice se è stato premuto o rilasciato, per ultimo. Il CIA-A li riceve nel registro a scorrimento e, alla fine, l'Amiga tira la linea KDAT a zero per 85 µs, la stretta di mano che chiede il tasto successivo. Premi un tasto della tua tastiera, o uno di questi.

Clicca qui e premi un tasto

Bit sul filo, nell'ordine 6-5-4-3-2-1-0-7 (linea attiva a zero)

KCLKKDATbit65432107

Ricevuto dal CIA-A

—

KDAT a zero per 85 µs: tasto successivo

Protocollo e codici: Amiga Hardware Reference Manual, appendice G.

Guasti in cui entra

Guide di diagnosi dell'esploratore di schede che misurano i segnali di questo chip, scheda per scheda.

Dove si trova

Fonti

  1. [1]IC, LSI, Complex Interface Adapter 8520 — desenho 318029 rev. C (especificação interna) · Commodore · espelho funet dos documentos Commodore, 1987
  2. [2]Amiga Hardware Reference Manual, apêndice F: 8520 Complex Interface Adapters · Commodore-Amiga · Amiga Developer CD 2.1, 1991
  3. [3]Amiga Hardware Reference Manual, apêndice G: Keyboard Interface · Commodore-Amiga · Amiga Developer CD 2.1, 1991
  4. [4]MOS Technology CIA (6526 e 8520) · Wikipédia
  5. [5]CIA 8520 (números de peça e máquinas) · Big Book of Amiga Hardware