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.
- 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.
- 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 1000 · 1985Timer 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…
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.
Un tasto impiega circa mezzo millisecondo ad arrivare al CIA: otto bit a 60 microsecondi ciascuno, circa 17 kbit/s.
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.
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.
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.
Il registro seriale del CIA-B non è usato per niente: ogni Amiga ha una porta seriale sincrona che dorme dentro il chip.
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.
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)
—
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.
La tastiera non risponde
La macchina si avvia ma i tasti non fanno nulla. I tasti arrivano alla CIA-A attraverso una linea seriale di dati e una di clock.
Amiga 500 rev 8A →Amiga 600 rev 2A →Amiga 1200 rev 2B →Amiga 1200 rev 1D.1 →Amiga 4000 rev 2 →Amiga 4000 rev B →Amiga 4000T rev 4 →
Il floppy non legge
Il drive interno non gira, non muove la testina o gira ma non legge. La CIA-B dà gli ordini al drive e Paula riceve i dati.
Amiga 500 rev 8A →Amiga 600 rev 2A →Amiga 1200 rev 2B →Amiga 1200 rev 1D.1 →Amiga 4000 rev 2 →Amiga 4000 rev B →Amiga 4000T rev 4 →
Dove si trova
Fonti
- [1]IC, LSI, Complex Interface Adapter 8520 — desenho 318029 rev. C (especificação interna) · Commodore · espelho funet dos documentos Commodore, 1987
- [2]Amiga Hardware Reference Manual, apêndice F: 8520 Complex Interface Adapters · Commodore-Amiga · Amiga Developer CD 2.1, 1991
- [3]Amiga Hardware Reference Manual, apêndice G: Keyboard Interface · Commodore-Amiga · Amiga Developer CD 2.1, 1991
- [4]MOS Technology CIA (6526 e 8520) · Wikipédia
- [5]CIA 8520 (números de peça e máquinas) · Big Book of Amiga Hardware







