DIP-40 · 6C001E-7 · desenho, não fotografia
SinclairFerranti (para a Sinclair)
1981
ULA da Ferranti
Um chip "por comprometer" que a Sinclair transformou no resto do computador.
A ULA (Uncommitted Logic Array) da Ferranti é uma matriz de portas lógicas ligadas à medida na última fase do fabrico. No ZX81 substituiu 18 chips do ZX80; no Spectrum gera a imagem a cores, lê o teclado, trata da cassete e do som, e decide quando o processador pode usar a memória.
- 8
Uma matriz por comprometer
Uma ULA é um chip fabricado de antemão com milhares de transístores ainda sem ligações. Só as últimas camadas de metal, feitas por encomenda, ligam esses transístores em portas lógicas e flip-flops, e é isso que define o que o chip faz. Sai muito mais barato e mais rápido de desenvolver do que um chip desenhado de raiz, que só compensa com volumes enormes.
A Ferranti, de Manchester, a mesma empresa que em 1951 tinha completado o Ferranti Mark 1, foi pioneira no Reino Unido destas matrizes em tecnologia bipolar. Segundo Chris Smith, que passou anos a estudar a ULA do Spectrum, a 6C001E terá vindo da série 6000 das matrizes da Ferranti, depois das séries 1000, 2000 e 5000 de lógica CML. A Ferranti fez também ULAs para o BBC Micro e o Acorn Electron.
Em 1982 a Ferranti chegou a vender o ULA Designer, uma estação de desenho por 46 500 libras, prometendo cerca de 5 000 libras por projeto e 1 a 2 libras por chip em grandes quantidades, contra 15 000 libras se o desenho fosse feito pela própria Ferranti. A divisão de microeletrónica foi vendida à Plessey em novembro de 1987.
A ULA do ZX81
Jim Westwood, engenheiro-chefe da Sinclair, recebeu a tarefa de baixar o custo do ZX80 e juntou 18 dos seus chips numa só ULA. O ZX81 ficou com quatro chips principais: processador, ULA, ROM e memória. O manual chamava à ULA o "dogsbody" do sistema, o faz-tudo.
É ela que gera o relógio de 6,5 MHz (de onde sai o de 3,25 MHz do processador), sincroniza a imagem, lê o teclado, grava e lê a cassete, escolhe quando falam a ROM e a RAM e controla a temporização de tudo. Como o mesmo pino serve o vídeo e a saída de cassete, durante LOAD e SAVE aparecem no ecrã as riscas em ziguezague.
Houve três versões principais: 2C158E, 2C184E e 2C210E. As duas primeiras geram um sinal de vídeo sem o "back porch", um pequeno intervalo do sinal que as televisões usam como referência, e em muitas televisões a cores a imagem fica muito escura, com o branco a parecer cinzento. A 2C210E já o tem. O Timex Sinclair 1000 usa a 2C210E.
A ULA do Spectrum
Richard Altwasser desenhou o hardware do Spectrum e, com ele, a sua ULA. O modo gráfico foi pensado para caber em menos de 7 KB: 6 144 bytes para os 256 × 192 píxeis e 768 bytes de atributos, um por cada bloco de 8 × 8, num total de 6 912 bytes. Cada atributo tem 3 bits para a cor da tinta, 3 para a do papel, um para o brilho e um para o FLASH, que troca as duas cores a cada 0,64 segundos.
A ULA lê o teclado e a entrada de cassete pela porta 0xFE, e pela mesma porta recebe a cor do bordo (bits 0 a 2), a saída MIC (bit 3) e o beeper (bit 4). Para limpar o ruído das cassetes, a equipa pôs um disparador de Schmitt dentro da ULA.
O relógio vem de um cristal de 14 MHz: a ULA divide-o por 2 para ter os 7 MHz dos píxeis e por 4 para ter os 3,5 MHz do Z80. E cerca de 50 vezes por segundo, no início de cada imagem, dá ao processador a interrupção que a ROM usa para ler o teclado e contar o tempo.
Memória contendida: quem manda é a ULA
A ULA e o processador partilham os primeiros 16 KB de RAM (0x4000 a 0x7FFF), onde está o ecrã, e a memória não pode ser lida pelos dois ao mesmo tempo. A ULA tem prioridade: enquanto desenha a parte útil do ecrã, atrasa o Z80 que quiser aceder a essa zona, segundo um padrão de 6, 5, 4, 3, 2, 1, 0, 0 ciclos. No bordo e nos retornos do feixe não há atrasos. O código nos 32 KB de cima corre sempre à velocidade toda.
No 48K cada linha dura 224 ciclos do processador e há 312 linhas, o que dá 69 888 ciclos por imagem. Os efeitos que mudam cores a meio do ecrã, a música de beeper com várias vozes ou as amostras de voz contam estes ciclos um a um. E como a ULA relê os atributos em cada linha de píxeis, há programas que trocam os atributos entre linhas para mostrar mais cores num bloco de 8 × 8.
Ao ler uma porta onde não há nada ligado, o processador apanha o byte que a ULA está nesse instante a ir buscar à memória de vídeo, o chamado bus flutuante. Jogos como Cobra, Short Circuit, Sidewize e Arkanoid usavam isto para saber em que ponto do ecrã ia o feixe e desenhar sem tremer.
Revisões: baratas e aranhas
A primeira ULA do Spectrum, a 5C102E (placas Issue 1 e algumas Issue 2), tinha um erro na contenção das portas que tornava pouco fiável a leitura do teclado a partir de código máquina. A correção foi o "dead cockroach" (barata morta): um chip 74LS00 soldado à mão por cima da placa, ligado por fios soltos.
A 5C112E, das Issue 2, corrigiu o erro mas passou a atrasar portas que não precisavam. Veio então a "aranha" (spider): um transístor ZTX313 soldado por cima do processador, com um díodo e uma resistência. A partir da Issue 3 esse transístor passou a fazer parte da placa, como TR6. ZTX era a linha de transístores da própria Ferranti.
Seguiu-se a família 6C001E. A 6C001E-5 mudou a temporização para funcionar com mais televisões, à custa de deslocar a imagem um carácter para a esquerda, e o bit da entrada EAR ficava a flutuar até a ULA aquecer. A 6C001E-6 foi usada na maioria das Issue 3, e a 6C001E-7 funciona em todas as placas do 48K; as últimas já trazem o logótipo da Plessey. As ULAs do ZX81 e do 48K têm 40 pinos.
Do 128 ao fim da ULA, e as Timex
O 128 e o +2 cinzento usam a 7K010E5, mais tarde marcada Amstrad 40056 mas funcionalmente igual, com 48 pinos e saída RGB. Um só cristal de 17,7345 MHz dá, dividido por 5, os 3,5469 MHz do processador e, dividido por 4, os 4,43 MHz da cor PAL. Cada imagem passa a ter 228 × 311 = 70 908 ciclos, e é por isso que o 128 é um pouco mais rápido do que o 48K e alguns truques de temporização notam a diferença.
Por um erro num chip lógico de paginação, no 128 e no +2 cinzento as páginas contendidas são a 1, 3, 5 e 7, e não a 4, 5, 6 e 7 que a documentação indicava. Nota-se, por exemplo, na voz digitalizada do Fantasy World Dizzy, que soa mal num 128 e bem num +2A.
No +2A, no +2B e no +3 a ULA desaparece: a Amstrad pôs no seu lugar um gate array, o 40077, num encapsulamento de montagem em superfície, que junta as funções da ULA e da lógica à volta. A contenção passa para as páginas 4 a 7 e só nos acessos à memória, e os jogos que dependiam do bus flutuante podem bloquear ou andar aos solavancos.
As Timex tomaram outro caminho: no TS2068 o papel da ULA é feito pelo SCLD (Standard Cell Logic Device), um chip de células padrão que a Timex encomendou à NCR, num encapsulamento de 68 pinos. Também está no TS1500 e nos TC2048 e TC2068 feitos em Portugal, onde permite os modos de 512 × 192 e a cor em células de 8 × 1. No TS2068, o Z80 trabalha a 3,528 MHz, um quarto do relógio de 14,112 MHz do SCLD.
Sabias que…
Diz-se que só 70% das portas da ULA do ZX81 deviam ser usadas, mas a Sinclair usou-as todas para meter mais funções, e o computador aquecia. Conta-se que havia quem o arrefecesse com um pacote de leite frio em cima da caixa.
O nome "barata morta" vem, diz-se, do aspeto do 74LS00 soldado por cima da placa, com as pernas e os fios à mostra.
Chris Smith tirou a cobertura a várias ULAs 6C001E-7 para as fotografar e redesenhou o circuito transístor a transístor: o esquema completo, em papel, mede 210 × 196 cm.
Na antiga União Soviética fez-se um chip compatível com a ULA do Spectrum, o T34VG1.
No 48K, o bordo muda de cor pela mesma porta que faz tocar o beeper, e é essa porta que pinta as riscas coloridas no bordo enquanto uma cassete carrega.
A ULA do 128 passou a ser marcada Amstrad 40056 depois da compra da Sinclair, mas funciona exatamente como a 7K010E5 da Ferranti.
O SCLD das Timex não é uma ULA: é um chip de células padrão, uma técnica diferente de semi-custom.
Attribute clash
No Spectrum, a ULA guarda a cor por célula de 8×8 pixels: só uma cor de tinta e uma de papel em cada uma. Quando a nave amarela entra numa célula, tudo o que lá está desenhado muda de cor com ela. Compara com cor por pixel.





