RETRODREAMSAMIGA & SPECTRUM
Menu

← Todos os chips

cia.chip

DIP-40 · 8520A-1 · desenho, não fotografia

Chips do AmigaCommodore (MOS / CSG)

1985

CIA 8520

O chip das portas: teclado, disquetes, porta paralela, LED e temporizadores. Há dois em cada Amiga.

O CIA 8520 é o chip de entradas e saídas do Amiga, herdado do 6526 do Commodore 64. Cada máquina tem dois: o CIA-A lê o teclado e a porta paralela, acende o LED e tira a ROM do caminho no arranque; o CIA-B comanda a unidade de disquetes e as linhas de controlo da porta série. Cada um tem ainda dois temporizadores e um contador de eventos.

bits de bus
8

Um chip do Commodore 64 que ficou no Amiga

CIA quer dizer Complex Interface Adapter. O desenho original é o 6526, da MOS Technology, o chip de portas do Commodore 64, que leva dois. Quando a Commodore desenhou o Amiga, em vez de criar um chip de entradas e saídas de raiz, adaptou o que já tinha: o 8520 é um 6526 com uma diferença, o relógio de horas. No 6526 é um relógio a sério, com horas, minutos e segundos em BCD; no 8520 passou a ser um simples contador binário de 24 bits, que conta impulsos. De resto é o mesmo chip.

A especificação interna da Commodore, o desenho 318029, descreve-o como um periférico compatível com o bus dos 65xx, em caixa de 40 pinos, e lista onde foi usado: Amiga e a unidade de disquetes 1581. Dos chips da Commodore no Amiga, é o único que não foi desenhado para ele, e fala a linguagem dos 65xx numa máquina de 68000: o processador tem um relógio próprio para estes periféricos, o relógio E, a um décimo da sua velocidade, e é por ele que o CIA se sincroniza.

Há dois em cada Amiga, do A1000 ao A4000, e o sistema trata-os por CIA-A e CIA-B. A exceção é o CD32: o Akiko absorveu-lhes as funções, e na placa da consola não há nenhum.

Dois chips, dois trabalhos

Cada CIA tem 16 pinos de entrada e saída, em duas portas de 8 bits, mais um registo de deslocamento série, um pino de impulso e uma entrada que deteta flancos. O Amiga distribui as tarefas entre os dois. O CIA-A, nos endereços ímpares a partir de $BFE001, tem a porta B inteira entregue aos 8 bits de dados da porta paralela, e a porta A cheia de bits soltos: o OVL, que põe a ROM no endereço zero; o LED de alimentação, que acende quando o bit está a zero; quatro sinais de estado da disquete (pronta, pista zero, protegida, disco trocado); e os botões de disparo dos dois comandos. O registo série dele recebe o teclado.

O CIA-B, nos endereços pares a partir de $BFD000, tem a porta B inteira a comandar a unidade de disquetes: motor, seleção de uma de quatro unidades, passo, direção e lado. A porta A junta as linhas de controlo de fluxo da porta série (DTR, RTS, CTS, DSR, deteção de portadora) e as de controlo da porta paralela (BUSY, POUT, SEL). A entrada de flancos dele conta os impulsos de índice da disquete, uma vez por volta. O registo série do CIA-B não é usado para nada.

Cada um fala com o processador por um nível de interrupção próprio: o CIA-A pelo nível 2, o CIA-B pelo nível 6. E os dois partilham uma curiosidade de desenho: o CIA-A está ligado aos 8 bits de baixo do bus de dados e o CIA-B aos 8 bits de cima, por isso os endereços de um são ímpares e os do outro pares, e só se lhes pode aceder byte a byte.

Os dois CIAs: quem liga a quê
  • Teclado
  • Unidade de disquetes
  • Porta paralela
  • Porta série (controlo de fluxo)
  • Sistema: OVL e LED
  • Botões dos comandos

Cada pino das portas A e B, com o sinal que o Amiga lhe liga. Fonte: Amiga Hardware Reference Manual, apêndice F. Carrega num sinal para o ver aceso na placa do Amiga 500 rev 8A, no explorador.

Como uma tecla chega ao processador

O teclado do Amiga tem um microcontrolador próprio e liga-se à máquina por quatro fios: alimentação, massa, KCLK (o relógio, só do teclado para o computador) e KDAT (os dados, nos dois sentidos). Cada tecla gera um código de 7 bits, e o oitavo bit diz se foi premida (0) ou largada (1). O teclado envia os 8 bits um a um pelo KDAT, com um impulso no KCLK por cada bit, a cerca de 60 microssegundos por bit: uma tecla demora meio milissegundo a chegar.

Do lado do Amiga, quem recebe é o registo de deslocamento série do CIA-A: o KDAT entra pelo pino SP e o KCLK pelo CNT. Ao oitavo impulso, o byte cai no registo de dados e o CIA levanta uma interrupção. O software lê o código e tem de responder: puxa o KDAT a zero durante 85 microssegundos, o aperto de mão que diz ao teclado que pode enviar a tecla seguinte.

Há dois pormenores que mostram o cuidado do desenho. A linha é ativa a zero, por isso os bits chegam invertidos. E o byte vai rodado: envia-se primeiro o bit 6 e por último o bit 7, o de premida ou largada. Se o teclado e o computador perderem o sincronismo, o teclado envia uns até receber o aperto de mão, e um byte de lixo cheio de uns lê-se como uma tecla largada, que não faz mal a ninguém. Depois avisa com um código especial ($F9) e repete a tecla perdida. Experimenta na demonstração mais abaixo.

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

Temporizadores e o contador de eventos

Cada CIA tem dois temporizadores de 16 bits. Carrega-se um valor, o temporizador conta para trás ao ritmo do relógio E do processador (709 379 vezes por segundo em PAL, 715 909 em NTSC, um décimo do relógio do 68000) e, quando chega a zero, interrompe e recarrega. Podem ligar-se um ao outro para contagens de 32 bits, contar impulsos de fora pelo pino CNT ou pôr a sua saída num pino da porta B. É com eles que o AmigaOS mede o tempo.

O terceiro contador é o TOD, o que no 6526 era o relógio de horas. No Amiga ganhou dois usos engenhosos: o do CIA-A conta os impulsos de 50 ou 60 Hz de cada imagem, e o do CIA-B conta as linhas do ecrã, 15 625 por segundo em PAL. Ambos têm um alarme que interrompe quando o contador chega a um valor escolhido. Como são contadores de 24 bits, o do CIA-B dá a volta de 18 em 18 minutos, e o do CIA-A ao fim de quase quatro dias.

Juntando tudo, cada CIA tem cinco fontes de interrupção: os dois temporizadores, o alarme, o registo série e a entrada de flancos. Um só registo, o ICR, diz qual disparou, e ler esse registo limpa-o, por isso quem o lê tem de tratar de tudo o que lá estava. No AmigaOS, os programas não tocam nos CIAs diretamente: pedem os temporizadores e as interrupções ao cia.resource, que reparte o que há entre o sistema e quem pedir.

O primeiro a acordar

Ao ligar, o CIA é dos primeiros chips a contar. Um reset põe todos os pinos como entradas, e como têm resistências de pull-up, lêem-se a um. Isso inclui o OVL, o bit 0 da porta A do CIA-A: a um, a ROM Kickstart aparece no endereço zero, onde o 68000 vai buscar o ponteiro da pilha e o endereço inicial. É a única forma de o processador arrancar, porque no endereço zero está normalmente a Chip RAM. Assim que está a correr, o Kickstart configura os dois bits de saída (OVL e LED) e baixa o OVL: a RAM volta ao endereço zero e a ROM fica só no seu lugar, no topo da memória.

O mesmo bit do LED controla o filtro passa-baixo do som: é por isso que, quando um jogo ou uma demo desliga o filtro, o LED de alimentação perde brilho. Na página da Paula explica-se o filtro; aqui está o interruptor.

A embalagem mudou com os anos. Nos A1000, A500, A2000 e A3000, o 8520 é um DIP de 40 pinos, quase sempre em soquete. Nos A600, A1200 e A4000, é um PLCC de 44 pinos soldado à placa. O CD32 não o tem. Por dentro, foi sempre o mesmo chip de 1985.

Sabias que…

  1. O endereço $BFE001 é dos mais conhecidos do Amiga: é o registo onde se escreve para apagar o LED, desligar o filtro de som e esconder a ROM.

  2. Uma tecla demora cerca de meio milissegundo a chegar ao CIA: oito bits a 60 microssegundos cada, a uns 17 kbit/s.

  3. O teclado envia o bit de premida ou largada em último lugar de propósito: se perder o sincronismo, o lixo que chega lê-se como uma tecla largada, que é inofensiva.

  4. Quem carrega em Ctrl-Amiga-Amiga num A1000 ou nalguns A2000 recebe primeiro um código de aviso ($78): o teclado anuncia que vai fazer reset dez segundos depois.

  5. O contador de eventos do CIA-B conta linhas do ecrã, 15 625 por segundo em PAL, e dá a volta aos 24 bits de 18 em 18 minutos.

  6. O registo série do CIA-B não é usado para nada: todos os Amigas têm uma porta série síncrona a dormir dentro do chip.

  7. O Caps Lock é a única tecla que só envia código quando se carrega: o bit de premida ou largada passa a dizer se a luz ficou acesa ou apagada.

RUN "DEMO"

Tecla a tecla pelo fio

O teclado do Amiga envia cada tecla como 8 bits em série: 7 de código e 1 que diz se foi premida ou largada, por último. O CIA-A recebe-os no registo de deslocamento e, no fim, o Amiga puxa a linha KDAT a zero durante 85 µs, o aperto de mão que pede a tecla seguinte. Carrega numa tecla do teu teclado, ou numa destas.

Clica aqui e carrega numa tecla

Bits no fio, pela ordem 6-5-4-3-2-1-0-7 (linha ativa a zero)

KCLKKDATbit65432107

Recebido no CIA-A

—

KDAT a zero durante 85 µs: tecla seguinte

Protocolo e códigos: Amiga Hardware Reference Manual, apêndice G.

Avarias em que entra

Guias de diagnóstico do explorador de placas que medem sinais deste chip, placa a placa.

Onde está

Fontes

  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