A ULA do TK90X

Em 15 de Abril de 2011.





Desde que comecei a participar da lista do TK90X um assunto recorrente é a ULA do TK. Vários defendem com unhas e dentes a necessidade de se descobrir o funcionamento exato dela para fazer um possível clone.

Sim, mas o que é a ULA? Bem, a sigla propriamente dita vem de Uncommitted Logic Array. É um chip de lógica que foi customizado pela Microdigital para o TK90X e é responsável pela grande maioria dos sistemas do TK. E como ele surgiu? Lá pelos anos 80 no auge da Reserva de Mercado era bem comum a prática da "clonagem" de equipamentos estrangeiros e não foi diferente com o ZX Spectrum lançado em 82 na Inglaterra e praticamente um sucesso instantâneo devido ao "alto poder" para o usuário doméstico unido com o baixo custo. De olho neste mesmo filão no mercado nacional, a Microdigital iniciou então o seu processo de cópia, mas esbarrou num enorme problema: o Spectrum tinha um chip customizado que, além de não saberem o funcionamento interno, ainda deveria ser adaptado para a realidade brasileira. Iniciou-se então um grande estudo acerca do chip para entender o funcionamento e começou-se a construir um circuito equivalente que faria as mesmas funções, mas no clone nacional. Após incansáveis testes, este circuito já completamente funcional foi sendo convertido e resumido a portas lógicas e então miniaturizado e acondicionado dentro de um chip de 40 pinos, a nossa ULA nacional. O que eu resumi apenas nesse parágrafo, na verdade custou mais de um ano de trabalho feito por dois engenheiros com apenas um osciloscópio e muita paciência, estudo e dedicação.


Irei descrever brevemente o funcionamento de cada pino indicando a função e a direção (se é um pino de entrada ou saída). Ao contrário da ULA original do Spectrum, a nossa tem SOMENTE portas lógicas, portanto todos os sinais são digitais. Os pinos foram divididos em grupos para facilitar a descrição, portanto estarão fora da ordem de contagem dos pinos. Para referência, pegue aqui os esquemas do TK90X levantados pelo Jorge Braga.

Pino 40 - VCC 5V
Pino 20 - GND
Direção: Entrada
São os pinos de alimentação do CI. O Vcc vem diretamente do regulador de voltagem e o GND é ligado ao mesmo Terra do resto da placa.

Pino 11 - OSC - 14.30244 Mhz
Direção: Entrada
Este é o que realmente faz a ULA trabalhar. Um "trem de pulsos" vai continuamente neste pino, ditando o ritmo para todas as portas lógicas internas "andarem". No Spectrum original a ULA trabalha com exatamente 14Mhz. Este então é dividido internamente por 2 para alimentar as portas lógicas que trabalham a 7Mhz e novamente por 2 para as portas que trabalham a 3.5Mhz. Mas por que no nacional ficou esse número tão "cabalistico", 14.30244Mhz? Esse número é exatamente a frequência do PAL-M multiplicado por 4. Então poderia ser economizado um cristal de frequência na montagem final do equipamento nacional. Isso pode parecer irrisório, mas lá nos 80s pra uma fábrica que produziria milhares de máquinas era uma senhora economia.

pino 36 CPU - 3.57Mhz
Direção: Saída
Saída de Clock para o Z80. A partir daqui a ULA faz o Z80 andar, enviando os pulsos de clock para o processador a aproximadamente 3.57Mhz. Isso é ligeiramente mais rápido que a frequência original do Spectrum que é 3.50Mhz para que a frequencia pudesse ser aproveitada para a geração das cores (vide pino 39). Curiosamente de tempos em tempos este clock é cortado para que a ULA possa ter preferência no acesso da memória baixa.

Pino 39 - Subcarrier - 3.575611 Mhz
Direção: Saída
Frequência da subportadora de croma. É usada pelo circuito de vídeo para geração das cores do padrão PAL-M. É o inverso da saída do clock da CPU, porém ao contrário desse, o clock aqui nunca para.
Esse mesmo clock é usado na parte de oscilação da fonte para gerar as tensões de -5V e +12V.

Pino 21 - Red
Pino 19 - Green
Pino 22 - Blue
Pino 18 - Bright
Direção: Saída
Aqui temos a saída de vídeo na sua forma digital. Com três bits temos 8 combinações possíveis de cores. O pino 18, Bright, é um "modificador" para as cores e, quando acionado, diz que aquela aquela cor em particular é mais brilhante. Na prática portanto, temos 16 cores possíveis, conforme organizei na tabela abaixo.

CorRGBBright
Preto0000
Azul0010
Verde0100
Ciano0110
Vermelho1000
Magenta1010
Amarelo1100
Branco1110
Preto com brilho0001
Azul com brilho0011
Verde com brilho0101
Ciano com brilho0111
Vermelho com brilho1001
Magenta com brilho1011
Amarelo com brilho1101
Branco com brilho1111


Pino 33 - Sync
Pino 35 - Burst Gate
Direção: Saída
Ocorrem a cerca de 15Khz marcando o sincronismo horizontal. O pino Sync na verdade é o Sincronismo Composto, combinando os sinais de VSync e Hsync do video. Ele marca o inicio e fim do sync tip, ou seja, o sinal de sinconismo propriamente dito. Já o Burst Gate ocorre logo após e marca o inicio e o fim do color burst para a sincronização das cores. Ele é necessário para o funcionamento do LM1886. Veja imagem abaixo para referência.


Fica mais fácil de perceber a função desses dois sinais mostrando no Osciloscópio. No canal 1 (vermelho) está o sinal de video composto e no canal 2 (amarelo) o Burst Gate.


Aqui, no canal 1 o video composto novamente e no canal 2 o Sync.


Pino 37 - A14
Pino 38 - A15
Direção: Entrada
Linhas de dados A14 e A15 necessárias para desempenho das funções internas.

Pino 15 - /MREQ
Pino 16 - /WR
Pino 17 - /RD
Direção: Entrada
Recebem os sinais diretamente da CPU. O pino 15 é dividido também com a linha de RESET que é invertida numa porta lógica antes. Portanto, quando o TK é resetado, este pino fica em nivel alto enquanto durar o pressionamento do botão.

Pinos 3 a 9 - A0 a A6
Direção: Saída
As linhas de endereços da ULA ficam conectadas diretamente as memórias (primeiros 16kb). Servem para controle da matriz de endereçamento (vide pino 12 e 13). As linhas de endereços da CPU também ficam ligados nessas memórias, porém por um multiplexador e resistores.

Pinos 25 a 32 - D0 a D7
Direção: Entrada e Saída
As linhas de dados da ULA ficam conectadas diretamente as memórias (primeiros 16kb). As linhas de dados da CPU também fica ligados nessas memórias, porém por resistores.

Pino 12 - /CAS
Pino 13 - /RAS
Pino 14 - /VRAMWR
Direção: Saída
Sinais de controle para as memórias de vídeo. As memórias dinâmicas funcionam com um sistema de endereçamento por matriz. Então, para se acessar uma determinada posição da memória, posicionamos o endereço da linha nas portas A0 a A6 da memória e em seguida ativamos o sinal /RAS. Em seguida, nas mesmas portas A0 a A6 colocamos o endereço da coluna e ativamos o sinal /CAS. Com isso o dado gravado nessa posição da matriz aparece na porta DOUT da memória.

Para se fazer a gravação o processo de seleção é exatamente o mesmo, porém o sinal de /VRAWR é usado após o /CAS para fazer a gravação na matriz do dado que se encontra a porta DIN do chip.

O esquema de matriz ocupa menos espaço no chip, portanto sendo mais barato para produzir e consequentemente diminuindo o custo da peça, que naquela época era bastante significativo para uma fábrica de computadores. Porém, a grande desvantagem delas é que precisam de um circuito extra para o refresh das memórias. Sem esse "refrescamento" elas simplesmente perdem seu conteúdo após alguns poucos nanosegundos. O refresh é feito posicionando sequencialmente cada linha da matriz nas portas A0 a A6 e executando o comando /RAS entre cada endereço.

Pino 1 - 50Hz / 60Hz
Direção: Entrada
Faz a seleção da frequencia de interrupção (vide pino 34) e da frequencia de varredura vertical necessária para a geração do video. Nos TKs nacionais esse pino vem desconectado (não estã ligado a nada), selecionando assim o modo 60 Hz. Já nos TKs que funcionam em modo PAL-N ele é ligado ao GND e com a ajuda de um cristal de frequencia extra é possivel gerar o PAL-N nesses micros.

Pino 34 - /INT
Direção: Saída
Normalmente em nível alto, gera uma interrupção para a CPU a cada 50 ou 60Hz, dependendo o modo selecionado pelo pino 1 da ULA. Essa interrupção desvia a execução do processamento para o endereço 0x0038h da ROM que é responsável pela leitura do teclado. Um dos comandos dessa rotina ativa o /CS da ULA (vide pino 2).

Pino 2 - /CS
Direção: Entrada
É o pino de controle para o Teclado, Som e MIC e é selecionado quando encontra uma instrução IN ou OUT na porta 0xFE (254 em decimal). Na realidade o hardware do TK (ou do Spectrum) só decodificam o bit da linha A0, portanto uma operação em qualquer porta par ativaria essa entrada, no entanto o fabricante sempre recomendou usar somente a porta 254 para evitar incompatibilidade com futuros hardwares.

Pino 10 - Keyboard
Direção: Saída
É ativado para a leitura do teclado. Como somente os primeiros cinco bits de D0 a D4 são necessários para essa tarefa, o bit D6 é usado durante a leitura da porta EAR. Note que a ULA simplesmente avisa quando vai ler o teclado (ou EAR). Os dados caem no barramento e ficam disponíveis para serem interpretados pela ROM.
Fica ativo quando o pino 2 (/CS) está selecionado e é executado um operação de leitura. Pino 17 (/RD) selecionado.

Pino 24 - Som
Direção: Saída
Neste pino é onde temos a saída de som e dele parte o famoso ponto "TP7", onde ligamos a saída de áudio no mod de A/V.
Fica ativo quando o pino 2 (/CS) está selecionado e é executado um operação de escrita. Pino 16 (/WR) selecionado.

Pino 23 - MIC
Direção: Saída
Saída de Áudio para o gravador cassete. Provavelmente é separada da saída de som para não saír o áudio na TV durante o comando SAVE.
Fica ativo quando o pino 2 (/CS) está selecionado e é executado um operação de escrita. Pino 16 (/WR) selecionado.



Bem, agora que já passamos da parte teórica, por que não algumas ilustrações?


Nas fotos acima, o Master Clock de cerca de 14Mhz na primeira linha, que está marcada como "Lab1 - 0". Na verdade esse título da linha pode ser mudado, mas dá tanto trabalho que deixei assim mesmo. Então quando eu me referir a "linha 0" será essa. Então, como eu dizia, o Master Clock (pino 11) na linha 0, o Clock da CPU (pino 36) na linha 1 e a subportadora (pino 39) na linha 3. Veja na primeira foto que peguei um momento onde a ULA tinha parado a CPU interrompendo momentaneamente o clock. Apesar da subportadora e o clock aparentemente ter a mesma largura, quando ampliado na foto 2, nota-se que a subportadora é ligeiramente menor. Aliás, essa diferença praticamente nem é perceptível no osciloscópio. Só notei quando coloquei no analizador.


Os sinais de Sync (pino 33) na linha 0 e Burst Gate (pino 35) na linha 1. Ocorrem praticamente juntos, mas na ampliação na segunda foto, é possivel ver que o Burst Gate ocorre exatamente depois do sinal de Sync.


Na linha 0 o /CS (pino 2), na linha 1 o Keyboard (pino 10) e na linha 2 o /INT (pino 34). Com o TK funcionando normalmente o /INT irá pulsar a cada 60Hz ou seja, sessenta vezes por segundo, gerando uma interrupção. Uma das funções programadas na ROM nessa interrupção é ler o teclado. Veja que logo após a interrupção a ULA é selecionada e esta imediatamente gera o sinal de leitura do teclado.


Os sinais R, G, B e Sync. Essas imagens foram capturadas com aquela tela inicial "TK90X Color Computer" e como ela é toda branca, vejam que todos os bits estão em nivel alto. Na segunda imagem peguei um outro ponto, muito provavelmente onde estão aquelas barras coloridas na parte de baixo.

Atualizado em 24 de maio de 2011

O Claudio Cassens, um dos engenheiros projetistas da ULA original cedeu as fotos do protótipo original.


Agradeço ao Claudio pela enorme contribuição.


Dúvidas ou sugestões, comente no espaço abaixo.


Voltar - Home


Comente



COMENTÁRIOS DESABILITADOS NO MOMENTO! RETORNAM EM BREVE
É expressamente proibido a reprodução total ou parcial deste texto sem a minha devida autorização por escrito.